我主要是一個C#背景(我非常喜歡新手),所以原諒我,如果我的假設是基於這個問題。在Java中檢查異常和File.exists()
簡而言之,我正在使用的一個軟件(Java)中的一個功能是用戶輸入一個文件名。我打算做的是讓程序循環,並將字符串附加到可能的附加字符串數組的文件名的末尾,以查看文件是否存在,如果存在,請將其打開。我保證只有一個給定名稱的文件,所以在第一次成功時突破循環並不是一個錯誤(如果用戶指定的文件名是「foo」,並且appendStrings數組有「bar」和「巴茲「的內部,我保證在目錄中永遠不會有」foobar「和」foobaz「)。我最終得出的結果與此類似:
public FileReader LocateFile(String fileName)
{
FileReader toReturn = null;
for(int i = 0; i < appendStrings.length; i++)
{
File locatedFile = new File(fileName + appendStrings[i]);
try
{
toReturn = new FileReader(locatedFile);
}
catch(FileNotFoundException ex)
{
continue;
}
}
//...handling in case I didn't find a file.
}
太好了,它工作得很好。除了兩個問題:
- 編譯器讓我很不滿,我聲明瞭一個我沒有使用的變量(ex)。我想我可以記錄異常或其他東西,但這看起來很荒謬,因爲這會經常發生,而且我寧願不用過多的噪音填充我的日誌文件,只是爲了讓編譯器感到高興。
- 我已經從無數來源讀到您不使用異常來控制程序的流程;你用它們爲例外的情況。
我的問題是:有沒有辦法在這種情況下取悅編譯器?我有捕捉FileNotFoundException,所以使用File.exists()不會真的解決我的問題。我是在倒退,還是這是Java如何滾動?
您還應該考慮File#exists()返回false,而引發FileNotFoundException的新FileReader(File)不具有相同的語義含義。對於目錄,文件#exists()將返回true,對於沒有讀權限的普通文件,可能會返回true,而在這些情況下,FileReader將引發FileNotFoundException。 – jarnbjo 2010-09-21 16:23:53