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

时间:2010-12-19 23:21:20

标签: 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();

任何帮助都会非常感激!

我现在有:

File file = new File(catName + ".txt");
String path = file.getCanonicalPath();
File filePath = new File(path);
filePath.delete();

尝试在运行时找到正确的路径,这样如果程序被转移到另一台计算机,它仍然会找到该文件。

13 个答案:

答案 0 :(得分:53)

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

答案 1 :(得分:30)

请务必找出当前的工作目录,并编写相对于它的文件路径。

此代码:

File here = new File(".");
System.out.println(here.getAbsolutePath());

...将打印出该目录。

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

答案 2 :(得分:11)

我遇到了同样的问题!然后意识到我的目录不是空的。我在另一个帖子中找到了解决方案:not able to delete the directory through 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());
}

答案 3 :(得分: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() + "')");
}

答案 4 :(得分:5)

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

答案 5 :(得分:3)

尝试以其他方法关闭您先前打开的所有FileOutputStream/FileInputStream,然后尝试删除,效果像吊饰一样。

答案 6 :(得分:1)

在我的情况下,由于未处理的异常而导致close()没有执行。

void method() throws Exception {
    FileInputStream fis = new FileInputStream(fileName);
    parse(fis);
    fis.close();
}

假设在parse()上抛出了异常,该异常在此方法中未处理,因此文件未关闭,正在删除文件,删除文件失败,并且不删除。

所以,相反,我有这样的代码,然后它工作......

    try {
        parse(fis);
    }
    catch (Exception ex) {
        fis.close();
        throw ex;
    }

基本的Java,有时我们会忽视它。

答案 7 :(得分:0)

如其他答案所示,在Windows上您无法删除已打开的文件。但是,可以阻止文件在Windows上删除的另一件事是,是否将文件映射到MappedByteBuffer(或DirectByteBuffer)上;如果是,则直到删除字节后才能删除该文件。缓冲区被垃圾收集。这里有一些相对安全的代码,可以在此处DirectByteBuffer强制回收之前强制关闭(清理)ByteBuffer:清理ByteBuffer之后,可以删除文件。但是,请确保在清除{{1}}之后再也不要使用它,否则JVM将崩溃。

答案 8 :(得分:0)

如果仍然无法正常工作,则可以调用垃圾收集器以关闭文件并释放内存

System.gc();
if(new File("./__tmp.txt").delete()){
    System.out.println("OK");
}

如果以前使用代码段fio.close()打开文件,请不要忘记关闭该文件。 我在Java 1.8中进行了测试,效果很好。

答案 9 :(得分:0)

由于目录不为空,因此file.delete()始终返回false。

我用过

file.deleteRecursively()

(在Kotlin中可用),它将完全删除,并像file.delete()一样返回布尔响应。

答案 10 :(得分:-1)

就我而言,我正在处理目录中包含的一组jar文件。处理完它们后,我尝试从该目录中删除它们,但不会删除。我当时使用JarFile来处理它们,但问题是我忘了在完成后关闭JarFile。

答案 11 :(得分:-2)

问题是检查天气是否关闭了所有溪流 如果打开关闭流并删除,重命名..等文件 这对我有用

答案 12 :(得分:-2)

我犯了打开BufferedReader的错误,如:

File f = new File("somefile.txt");
BufferedReader br = new BufferedReader(new FileReader(f));

...当然我无法执行f.delete(),因为我把它包裹了  FileReader而不是实例化自己的变量,我可以在其中明确地关闭它。咄...

我编码后:

File f = new File("somefile.txt");
FileReader fread = new FileReader(f);
BufferedReader br = new BufferedReader(fread);

我可以发出br.close(); br=null; fread.close(); fread=null;f.delete()工作正常。

相关问题