Java 文件的delete方法实际上是如何删除的&什么?

Java 文件的delete方法实际上是如何删除的&什么?,java,file,serialization,io,directory,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方法返回

假设我创建了一个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,表示文件未被删除。我知道file对象表示文件的位置,而不是文件的内容。但实际上删除的是什么?如何删除文件的位置,而不删除文件本身的内容


我还输入了Untitled1文件的文件路径作为file objects构造函数的参数,该构造函数也没有删除Untitled1.txt文件。

因此,文件本身被删除。False可能由于各种原因而被返回

公共布尔删除

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

返回: 当且仅当成功删除文件或目录时为true;否则就错了

抛出:

SecurityException—如果存在安全管理器,且其SecurityManager.checkDeletejava.lang.String方法拒绝对该文件的删除访问


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

文件通过其在文件系统中的路径(从根节点开始)进行标识

路径的表示取决于系统。e、 g.在windows C:\foo\bar中,而在linux/home/foo/bar中

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

File f = new File("Untitled1.txt");
首先,请注意File是一个古老的类,现在不应该使用它

最好使用Files类,更具体地说是它的方法

至于到底删除了什么:一个文件是硬盘中的一堆字节。磁盘(或其分区之一)被格式化为文件系统,这是一种组织目录和文件的数据结构。特定的文件系统规定了如何将文件分解为多个部分,以及如何通过查找、读取、写入等操作定位或添加这些部分

文件系统有目录,为文件提供起点。目录层次结构中的文件路径告诉系统在何处查找文件,包括其所有信息,如指向其开始的指针、读/写权限等。目录中告诉实际文件内容在何处的信息有时称为链接,至少在Unix文件系统中是这样

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

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


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

编译代码时,没有引发异常。我在实例化file对象之前创建了一个try块,并在print语句之后关闭了该块。然后,我放置了一个catch块来捕获泛型类型Exception的异常,其中包含一个printStackTrace方法。但是没有发现异常。不要发布文本图片。浪费你的时间和我们的带宽。把课文发出来,明白了。Will removeEJP建议您将其替换为文本,而不是完全删除。我把它以文本形式加了回去。如果需要,请将其修剪或再次移除。我认为这是有用的信息。请尝试提供完整路径,然后它将删除,例如new FileC:\\Untitled1.txt;这并不重要,您仍然需要提供绝对路径,否则f将为空,delete将不包含任何内容。因为它什么也不做,所以不会有任何例外。