这是我目前要删除的文件,但它不起作用。我认为这可能是许可问题或其他什么,但事实并非如此。我正在测试的文件是空的并且存在,所以不确定它为什么不删除它。
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();
尝试在运行时找到正确的路径,这样如果程序被转移到另一台计算机,它仍然会找到该文件。
答案 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()
工作正常。