如何检查Java中是否存在文件?
在打开Java阅读器之前,如何检查文件是否存在? (相当于Perl的-e $filename
)。
SO上唯一类似的问题处理写入文件,因此使用FileWriter来回答,这在这里显然不适用。
如果可能的话,我宁愿一个真正的API调用返回true / false,而不是一些“调用API来打开一个文件,并赶上时,它会抛出一个exception,你检查文本中没有文件”,但我可以住在后者。
使用java.io.File
:
File f = new File(filePathString); if(f.exists() && !f.isDirectory()) { // do something }
我会build议使用isFile()
而不是exists()
。 大多数时候你正在检查path是否指向一个文件,而不仅仅是它存在。 请记住,如果path指向一个目录,则exists()
将返回true。
new File("path/to/file.txt").isFile();
new File("C:/").exists()
将返回true,但不允许您打开并从文件中读取它。
通过在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 }
如果两者都存在且不存在,则返回false,则无法validation文件的存在。 (也许没有访问权限到这个path)
您可以检查path是目录还是常规文件。
if (Files.isDirectory(path)) { // path is directory } if (Files.isRegularFile(path)) { // path is regular file }
请检查这个Java SE 7教程 。
File f = new File(filePathString);
这不会创build一个物理文件。 只需创build类File的对象。 要物理创build一个文件,你必须明确地创build它:
f.createNewFile();
所以f.exists()
可以用来检查这个文件是否存在。
f.isFile() && f.canRead()
使用Java 8:
if(Files.exists(Paths.get(filePathString))) { // do something }
首先打在谷歌上的“java文件存在”:
import java.io.*; public class FileTest { public static void main(String args[]) { File f = new File(args[0]); System.out.println(f + (f.exists()? " is found " : " is missing ")); } }
您可以使用以下: File.exists()
别。 只要赶上FileNotFoundException.
文件系统必须testing文件是否存在。 这样做是没有意义的,有两个原因,例如:
- 双倍的代码
- 时间窗口的问题,即文件可能存在,当你testing,但不是当你打开, 反之亦然,和
- 事实上,正如这个问题的存在所表明的那样,你可能会做出错误的testing,得到错误的答案。
不要试图猜测系统。 它知道。 而不要试图预测未来。 一般来说,testing任何资源是否可用的最好方法就是尝试使用它。
对我来说,肖恩·AO·哈尼(Sean AO Harney)接受的答案和由Cort3z得出的评论相结合似乎是最好的解决scheme。
使用以下片段:
File f = new File(filePathString); if(f.exists() && f.isFile()) { //do something ... }
希望这可以帮助别人。
有多种方法来实现这一点。
-
新
File("/path/to/file").exists();
如果只是为了生存。 它可能是文件或目录。 -
文件f =新build文件(“/ path / to / file”); if(f.exists()&& f.isFile()){}
检查文件
-
文件f =新build文件(“/ path / to / file”); if(f.exists()&& f.isDirectory()){}
检查目录。
-
Java 7的方式。
Path path = Paths.get("/path/to/file");
Files.exists(path)
– 存在Files.isDirectory(path)
– 是目录Files.isRegularFile(path)
– 常规文件Files.isSymbolicLink(path)
– 符号链接
这也是值得熟悉Commons FileUtils http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html这有其他的方法来pipe理文件,往往比JDK更好。;
不要使用带String的File构造函数。
这可能不行!
而不是这个使用URI:
File f = new File(new URI("file:///"+filePathString.replace('\\', '/'))); if(f.exists() && !f.isDirectory()) { // to do }
如果你想检查目录dir
的File
String directoryPath = dir.getAbsolutePath() boolean check = new File(new File(directoryPath), aFile.getName()).exists();
并检查check
结果
new File("/path/to/file").exists();
会做的伎俩
File.exists()
检查文件是否存在,它将返回一个布尔值来指示检查操作的状态; 如果文件存在,则为true; 如果不存在,则为false。
File f = new File("c:\\test.txt"); if(f.exists()){ System.out.println("File existed"); }else{ System.out.println("File not found!"); }
我知道我在这个线程有点晚了。 不过,这里是我的答案,自Java 7及以后有效。
以下片段
if(Files.isRegularFile(Paths.get(pathToFile))) { // do something }
是完全满意的,因为如果文件不存在,方法isRegularFile
返回false
。 因此,不需要检查Files.exists(...)
。
请注意,其他参数是指示如何处理链接的选项。 默认情况下,遵循符号链接。
从Java Oracle文档
您可以使用下面的代码来检查:
import java.io.File; class Test{ public static void main(String[] args){ File f = new File(args[0]); //file name will be entered by user at runtime System.out.println(f.exists()); //will print "true" if the file name given by user exists, false otherwise if(f.exists()) { //executable code; } } }