使用Java中的delete()方法删除文件

时间:2013-02-15 16:52:51

标签: java file

我对以下代码有点怀疑:

try {
    File file = new File("writing");
    file.createNewFile();
    System.out.println(file.delete());
    System.out.println(file.exists());

    PrintWriter pw = new PrintWriter(file);
    pw.print(324.2342);
    pw.flush();
    pw.close();
    FileReader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);
    System.out.println(br.readLine());
    br.close();
} catch(IOException ioE) {
    System.out.println("Indeed");
}

为什么在这种情况下,方法file.delete()显然表示它可以正常工作,因为它在执行时返回“true”,并且它也会被返回“false”的file.exists()方法确认。但是在运行时我没有得到任何异常,例如“IOException文件”写“不存在”或类似的东西。

为什么即使在物理上删除文件仍保留在堆中?一旦调用delete方法,它不应该自动被垃圾收集吗?我知道它不是因为我看到了输出。

4 个答案:

答案 0 :(得分:4)

这是因为File表示一个抽象路径,请参阅JavaDoc http://docs.oracle.com/javase/6/docs/api/java/io/File.html。它不代表操作系统中的文件句柄 代码中的一行:

PrintWriter pw = new PrintWriter(file);

只需创建一个新文件即可。尝试在调用此文件后删除该文件...

答案 1 :(得分:2)

File object表示文件系统上物理文件的路径是否存在。这就是为什么你有exists()(检查它是否存在)和createNewFile()(如果找不到则创建文件)的原因。


另请注意,PrintWriter(File file)会创建一个新文件,如果它不存在。

  

<强>参数:

     

file - 要用作此writer的目标的文件。如果是文件   然后它将被截断为零大小;否则,一个新文件   将被创建。输出将被写入文件并且是   缓冲。

答案 2 :(得分:1)

文件是真实文件的句柄(是否存在)。你正在创建并删除上面的文件 - 到目前为止一切都很好。

当你稍后来到PrintWriter时,它会在你使用它时再次创建文件 - 你之前删除它并不重要。

事实上,根据您的使用情况,这可能是您想要的 - 例如,您可能希望删除旧的日志文件,例如在重新创建并再次写入之前。

最后,在您的方法存在之前,您的代码中没有任何内容符合垃圾收集的条件,即使这样,底层文件也将继续存在(如果您不删除它) - 并且在这种情况下任何垃圾收集都不会影响底层文件。删除调用后它将被删除,并在PrintWriter完成后再次存在。

希望这有帮助!

答案 3 :(得分:0)

该文件没有指向特定文件的链接,而是文件路径中的任何文件指针。使用此行,您将创建一个新文件:

PrintWriter pw = new PrintWriter(file);