Java 检查文件是否存在,但不创建它
如果我这样做:Java 检查文件是否存在,但不创建它,java,file-io,Java,File Io,如果我这样做: File f = new File("c:\\text.txt"); if (f.exists()) { System.out.println("File exists"); } else { System.out.println("File not found!"); } 然后创建文件并始终返回“file exists”。是否可以在不创建文件的情况下检查文件是否存在 编辑: 我忘了提到它在一个for循环中。这是真实的情况: for (int i = 0; i
File f = new File("c:\\text.txt");
if (f.exists()) {
System.out.println("File exists");
} else {
System.out.println("File not found!");
}
然后创建文件并始终返回“file exists”。是否可以在不创建文件的情况下检查文件是否存在
编辑:
我忘了提到它在一个for循环中。这是真实的情况:
for (int i = 0; i < 10; i++) {
File file = new File("c:\\text" + i + ".txt");
System.out.println("New file created: " + file.getPath());
}
for(int i=0;i<10;i++){
文件文件=新文件(“c:\\text”+i+“.txt”);
System.out.println(“创建的新文件:“+file.getPath());
}
创建文件
实例不会在文件系统上创建文件,因此发布的代码将满足您的要求。当您实例化文件
时,您不是在磁盘上创建任何东西,而只是构建一个对象,在该对象上可以调用一些方法,如exists()
这既好又便宜,不要试图避免这个实例化
文件
实例只有两个字段:
private String path;
private transient int prefixLength;
这是构造器:
public File(String pathname) {
if (pathname == null) {
throw new NullPointerException();
}
this.path = fs.normalize(pathname);
this.prefixLength = fs.prefixLength(this.path);
}
如您所见,
文件
实例只是路径的封装。创建它以调用exists()
是正确的方法。不要试图优化它。从Java 7开始,您可以使用:
在中,您可以找到有关此的一些详细信息:
Path
类中的方法是语法的,这意味着它们在Path
实例上操作。但最终您必须访问文件系统以验证特定的路径是否存在。您可以使用exists(Path,LinkOption…
和notExists(Path,LinkOption…
方法)执行此操作。请注意,!Files.exists(path)
不等同于Files.notExists(path)
。测试文件是否存在时,可能会出现三种结果:
- 已验证该文件是否存在
- 已验证该文件不存在
- 文件的状态未知。当程序无法访问该文件时,可能会出现此结果
如果同时存在
和notExists
返回false
,则无法验证文件的存在
在JDK 8中,Files.exists方法的性能明显较差,当用于检查实际不存在的文件时,会显著降低应用程序的速度
这也适用于Files.noExists、Files.isDirectory和Files.isRegularFile
根据这一点,您可以使用以下各项:
Paths.get("file_path").toFile().exists()
@MarcoS的可能复制品:实际上它不是复制品。这个问题的标题措词很糟糕。@JoachimSauer:也许这不是一个完全重复的问题,但通过阅读这个问题并尝试一点代码,可以推断出答案。。。所以对我来说,它是一个副本,你能在WEBMethods转换器中添加任何方法吗?我需要详细说明这段代码的作用。@威胁:与一般观点相反,在循环中运行代码不会从根本上改变代码的作用。@威胁如果新文件代码在循环中,您可能会犯编码效率低的错误,但它仍然不会创建真正的文件。如果您的文件存在,那绝对不是由于文件类造成的。@不用担心。说真的,那真的很便宜。这实际上只是对你的路径的一个封装。@ThreaT:不,它不是new File()
从不在文件系统上创建文件,无论它位于何处。但是,循环中的其他内容可能会创建该文件。@威胁:该代码仍然不会在硬盘上创建文件,除非它不是您所说的java.io.file
。在您的项目中是否有任何其他名为File
的类,您可能(意外)正在使用它?@ThreaT,完全无关。为了使用file
创建文件,您需要调用file.createNewFile()
@ThreaT,该for
循环不会创建文件。它将打印出消息“新建文件…”,但此文件将不存在于您的文件系统中。将file.exists()
添加到消息中,消息将为false
(假设它们当前不存在)。
Paths.get("file_path").toFile().exists()