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



我对以下代码有点怀疑:

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方法后立即自动进行垃圾收集吗?我知道没有,因为我看到了输出。

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

PrintWriter pw = new PrintWriter(file);

只需创建一个新文件。调用后尝试删除文件。。。

File对象表示文件系统上物理文件的路径,无论是否存在。这就是为什么您有exists()(用于检查它是否存在)和createNewFile()(用于在找不到文件的情况下创建文件)。


还要注意,如果PrintWriter(File file)不存在,它将创建一个新文件。

参数:

file—要用作此编写器目标的文件。如果文件存在,则它将被截断为零大小;否则,一个新文件将被创建。输出将写入文件缓冲。

文件是真实文件(存在与否)的句柄。正如你所说,你创建然后删除上面的文件——到目前为止一切都很好。

当你稍后使用PrintWriter时,它会在你使用它时再次创建文件——不管你以前删除过它。

事实上,根据您的用例,这可能是您想要的确切原因——例如,在重新创建并再次写入之前,您可能想要删除一个旧的日志文件。

最后,在你的方法存在之前,你的代码中没有任何东西可以进行垃圾收集,即使这样,底层文件也会继续存在(如果你不删除它的话)——在这种情况下,任何垃圾收集都不会影响底层文件。它将在删除调用后被删除,并在PrintWriter完成后再次存在。

希望这能有所帮助!

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

PrintWriter pw = new PrintWriter(file);

相关内容

  • 没有找到相关文章

最新更新