Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查文件是否存在,但不创建它_Java_File Io - Fatal编程技术网

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()