怎么&文件的删除方法实际删除了什么?

时间:2015-08-03 21:28:17

标签: java file serialization io directory

假设我创建了一个txt文件并将其另存为“Untitled1”。我输入eclipse并键入以下内容:

import java.io.*;
public class Test {

public static void main(String[] args){
File f = new File("Untitled1.txt");
boolean isDeleted = f.delete();

System.out.println(isDeleted);

       }
}

从delete方法返回False,表示文件未被删除。我知道文件对象代表文件的位置而不是文件的内容。但那么实际上被删除了什么?如何删除文件的位置,而不删除文件本身的内容?

我还输入 Untitled1 文件的路径作为File对象构造函数的参数,它也没有删除Untitled1.txt文件。

3 个答案:

答案 0 :(得分:1)

文件由其通过文件系统的路径标识,从根节点开始。

路径的表示取决于系统。例如在Linux C:\foo\bar中的Windows /home/foo/bar中。

因此,在下面的代码中,字符串路径将转换为抽象路径名,它将创建File实例,当您调用delete方法时,它将尝试删除该节点。基本上内容和路径并没有什么不同。

File f = new File("Untitled1.txt");

答案 1 :(得分:0)

因此,文件本身将被删除。由于各种原因,可能会返回错误。

  

public boolean delete()

     

删除此抽象路径名表示的文件或目录。如果此路径名表示目录,则该目录必须为空才能被删除。   请注意,Files类定义了delete方法,以便在无法删除文件时抛出IOException。这对于错误报告和诊断无法删除文件的原因非常有用。

     

返回:   true当且仅当文件或目录被成功删除时; false否则

     

抛出:

     

SecurityException - 如果存在安全管理器且其SecurityManager.checkDelete(java.lang.String)方法拒绝删除对文件的访问

抓住SecurityException,您可能会发现不允许您以编程方式直接删除该文件。

答案 2 :(得分:-2)

首先,请注意File是一个旧的bad类,现在不应该使用。

使用Files类,更具体地说是delete方法要好得多。

至于删除的内容:文件是位于硬盘中的一堆字节。磁盘 - 或其中一个分区 - 被格式化为文件系统,这是一种组织目录和文件的数据结构。特定的文件系统决定了如何将文件分解成碎片,如何通过 seek read write 等操作来定位或添加这些碎片>等等。

文件系统有目录,它为您提供文件的起点。目录层次结构中的文件路径告诉系统在何处查找文件,包括其所有信息(如指向其启动的指针,读/写权限等)。目录中的信息告诉实际文件内容的位置是有时被称为"链接" (至少在Unix文件系统中)。

当您删除文件时,通常会发生的事情是删除该目录中该文件的特定链接。如果这是最后一个链接(文件可以从多个目录链接,至少在某些文件系统中),则属于该文件的块也标记为空闲,以便可以将它们分配给另一个文件。

因此,您的File对象告诉系统文件的位置,但delete操作最终告诉系统将文件与目录(路径的倒数第二部分)取消链接,如果它是最后一个链接,它还告诉系统转​​到文件内容并将其标记为空闲。

这是一般性描述。确切的细节以及内容被标记为空闲时会发生什么取决于所使用的特定文件系统(例如ext4,reiserFS ...(Linux),HFS +(MacOS X),NTFS,FAT32 ......(Windows))。 / p>