Файл Java'.delete () ' не удаляет указанный файл
это то, что мне нужно удалить файл, но он не работает. Я думал, что это могут быть проблемы с разрешением или что-то еще, но это не так. Файл, который я тестирую, пуст и существует, поэтому не уверен, почему он не удаляет его.
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();
попытаться найти правильный путь во время выполнения, чтобы, если программа будет перенесена на другой компьютер, она все равно найдет файл.
10 ответов
обязательно узнайте свой текущий рабочий каталог и напишите свой путь к файлу относительно него.
этот код:
File here = new File(".");
System.out.println(here.getAbsolutePath());
... распечатает этот каталог.
кроме того, не связанный с вашим вопросом, попробуйте использовать File.separator
чтобы оставаться независимой от ОС. Символы работают только на Windows.
проблема также может быть связана с любыми выходными потоками, которые вы забыли закрыть. В моем случае я работал с файлом до того, как файл был удален. Однако в одном месте в файловых операциях я забыл закрыть выходной поток, который я использовал для записи в файл, который пытался удалить позже.
У меня такая же проблема! потом понял, что мой каталог не пуст. Я нашел решение в другой теме: не удалось удалить каталог через 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());
}
Я подозреваю, что проблема в том, что путь неверен. Попробуйте это:
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() + "')");
}
в моем случае это был close (), который не выполнялся из-за необработанного исключения.
void method() throws Exception {
FileInputStream fis = new FileInputStream(fileName);
parse(fis);
fis.close();
}
предположим, что исключение выбрасывается на parse (), который не обрабатывается в этом методе, и поэтому файл не закрывается, вниз по дороге, файл удаляется, и этот оператор delete терпит неудачу и не удаляет.
Итак, вместо этого у меня был такой код, тогда он работал...
try {
parse(fis);
}
catch (Exception ex) {
fis.close();
throw ex;
}
Итак, базовая Java, которую мы иногда упускаем из виду.
попробуйте закрыть все FileOutputStream/FileInputStream
вы открыли ранее в других методах, затем попробуйте удалить, работали как шарм.
в моем случае я обрабатывал набор файлов jar, содержащихся в каталоге. После их обработки я попытался удалить их из этого каталога, но они не удалялись. Я использовал JarFile для их обработки, и проблема заключалась в том, что я забыл закрыть JarFile, когда я закончил.
проблема заключается в том, что проверить погоду вы закрыли все потоки или нет если открыто, закройте потоки и удалите,переименуйте..файл и т. д. это сработало для меня
Я сделал ошибку, открыв 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()
работала нормально.