我主要是一个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