Java'file.delete()'没有删除指定的文件

Kim*_*oyd 39 java file delete-file

这是我目前要删除的文件,但它无法正常工作.我认为这可能是许可问题或其他什么,但事实并非如此.我正在测试的文件是空的并且存在,所以不确定它为什么不删除它.

UserInput.prompt("Enter name of file to delete");
String name = UserInput.readString();
File file = new File("\\Files\\" + name + ".txt");
file.delete();
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

我现在有:

File file = new File(catName + ".txt");
String path = file.getCanonicalPath();
File filePath = new File(path);
filePath.delete();
Run Code Online (Sandbox Code Playgroud)

尝试在运行时找到正确的路径,以便在程序转移到另一台计算机时仍然可以找到该文件.

小智 57

问题也可能是由于您忘记关闭的任何输出流.在我的情况下,我在删除文件之前使用该文件.但是,在文件操作的一个位置,我忘记关闭一个输出流,我将其写入稍后尝试删除的文件.

  • 相同的概念,但我发现我必须关闭 *input* 流。 (4认同)

Gor*_*vic 32

一定要找出当前的工作目录,并编写相对于它的文件路径.

这段代码:

File here = new File(".");
System.out.println(here.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

...将打印出该目录.

此外,与您的问题无关,请尝试使用File.separator以保持与操作系统无关.反斜杠仅适用于Windows.

  • 与流行观点相反,正斜杠在Windows上可以执行。只是不要期望Windows会“返回”带有正斜杠的路径。 (2认同)

小智 12

我遇到了同样的问题!然后意识到我的目录不是空的.我在另一个线程中找到了解决方案:无法通过Java删除目录

/**
 * Force deletion of directory
 * @param path
 * @return
 */
static public boolean deleteDirectory(File path) {
    if (path.exists()) {
        File[] files = path.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {
                deleteDirectory(files[i]);
            } else {
                files[i].delete();
            }
        }
    }
    return (path.delete());
}
Run Code Online (Sandbox Code Playgroud)


ABH*_*WAJ 8

尝试关闭FileOutputStream/FileInputStream您之前在其他方法中打开的所有内容,然后尝试删除,就像一个魅力。


Ste*_*n C 6

我怀疑问题是路径不正确.试试这个:

UserInput.prompt("Enter name of file to delete");
String name = UserInput.readString();
File file = new File("\\Files\\" + name + ".txt");
if (file.exists()) {
    file.delete();
} else {
    System.err.println(
        "I cannot find '" + file + "' ('" + file.getAbsolutePath() + "')");
}
Run Code Online (Sandbox Code Playgroud)


小智 5

如果要删除文件,请先关闭所有连接和流.之后删除文件.