Файл 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() работала нормально.