在Java中(相当于Perl的-e $filename)打开文件读取之前,如何检查文件是否存在?
SO中唯一类似的问题涉及写入文件,因此使用FileWriter来回答,这显然不适用于这里。
如果可能的话,我更喜欢一个真正的API调用返回true/false,而不是一些“调用API打开一个文件,并在它抛出一个异常时捕获你检查文本中的‘无文件’”,但我可以接受后者。
在Java中(相当于Perl的-e $filename)打开文件读取之前,如何检查文件是否存在?
SO中唯一类似的问题涉及写入文件,因此使用FileWriter来回答,这显然不适用于这里。
如果可能的话,我更喜欢一个真正的API调用返回true/false,而不是一些“调用API打开一个文件,并在它抛出一个异常时捕获你检查文本中的‘无文件’”,但我可以接受后者。
当前回答
设计这些方法是有特定目的的。我们不能说使用任何人来检查文件是否存在。
isFile():测试由这个抽象路径名表示的文件是否是一个正常的文件。 exists():测试由此抽象路径名表示的文件或目录是否存在。 docs.oracle.com
其他回答
使用java.io.File:
File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) {
// do something
}
你可以使用以下方法:
设计这些方法是有特定目的的。我们不能说使用任何人来检查文件是否存在。
isFile():测试由这个抽象路径名表示的文件是否是一个正常的文件。 exists():测试由此抽象路径名表示的文件或目录是否存在。 docs.oracle.com
通过在Java SE 7中使用nio,
import java.nio.file.*;
Path path = Paths.get(filePathString);
if (Files.exists(path)) {
// file exist
}
if (Files.notExists(path)) {
// file is not exist
}
如果exists和notExists都返回false,则不能验证文件是否存在。(可能没有访问该路径的权限)
您可以检查path是目录还是普通文件。
if (Files.isDirectory(path)) {
// path is directory
}
if (Files.isRegularFile(path)) {
// path is regular file
}
请查看Java SE 7教程。
我建议使用isFile()而不是exists()。大多数情况下,您需要检查路径是否指向一个文件,而不仅仅是它是否存在。记住,如果您的路径指向一个目录,exists()将返回true。
new File("path/to/file.txt").isFile();
new File("C:/").exists()将返回true,但不允许您将其作为文件打开并从中读取。