Как правильно удалить файл?

У меня проблема при удалении файлов из каталога img с помощью org.apache.commons.io.FileUtils. Я использую этот код:

File dir = new File(".\\img");
    FileFilter fileFilter = new WildcardFileFilter(userId + ".*");
    File[] files = dir.listFiles(fileFilter);
    System.out.println("files found: " + files.length);
    for (int i = 0; i < files.length; i++) {
        boolean success = FileUtils.deleteQuietly(files[i]);
        System.out.println(files[i] + " delete result = " + success);
    }
}

На самом деле код используется для замены файлов изображений, существовавших в каталоге img, на новые. Мне нужно удалить все ранее существовавшие файлы с именами n. * С новым файлом, например. n.png. Если я пытаюсь удалить файлы изображений, я получаю ложное значение для переменной success, и файлы не удаляются. Но не файлы изображений, например. * .abc; * .acd; * .acdc и т. д. удаляются успешно. Как обстоят дела с этой проблемой?


person vitaliy4us    schedule 16.01.2017    source источник
comment
В конце есть закрывающая скобка без соответствующей открывающей скобки, и отступ странный. Есть ли в коде какой-нибудь оператор if?   -  person Florian Albrecht    schedule 16.01.2017
comment
Не могли бы вы предоставить образец вывода?   -  person phss    schedule 16.01.2017
comment
Почему бы не попробовать позвонить files[i].delete() и посмотреть, какое исключение возникло.   -  person Andy Turner    schedule 16.01.2017
comment
Попробуйте использовать метод jdk File.delete вместо deleteQuietly. Я надеюсь, что это вызовет какое-то исключение. Было бы намного проще отладить, если есть ошибка, которую нужно решить.   -  person Curious    schedule 16.01.2017
comment
Seconded, FileUtils.deleteQuietly() Удаляет файл, не вызывая исключения. цитируя их javadoc, поэтому отладка с помощью этого метода будет невозможна.   -  person Aaron    schedule 16.01.2017
comment
Есть две разные проблемы: почему файлы не удаляются и почему нет ошибки. Что касается первого, было бы интересно увидеть длинный список каталогов (ls -l), чтобы показать права доступа к файлам до запуска кода и узнать, какой пользователь запускает код.   -  person Thomas Hedden    schedule 16.01.2017
comment
Это мой результат: ********** Найдено файлов: 5. \ img \ 1.abc delete result = true. \ Img \ 1.acd delete result = true. \ Img \ 1.adc delete result = true. \ img \ 1.jpg delete result = false. \ img \ 1.png delete result = false   -  person vitaliy4us    schedule 16.01.2017
comment
Что говорит вам шаговый отладчик?. На ваш вопрос можно очень быстро и легко ответить с помощью пошагового отладчика. Вы всегда должны пытаться решить свои проблемы с помощью пошагового отладчика, прежде чем переходить к StackOverflow, потому что ваш код работает так, как задумано.   -  person    schedule 28.05.2018


Ответы (2)


Попробуй это:

java.nio.file.Files.delete(files[i].toPath());

И посмотрите, какое исключение будет сгенерировано.

person hoat4    schedule 16.01.2017

Этот код работает для меня:

File dir = new File("/home/abhijith/.img");
        FileFilter fileFilter = new WildcardFileFilter("abc"+".*");
        File[] files = dir.listFiles(fileFilter);
        System.out.println("files found: " + files.length);
        for (int i = 0; i < files.length; i++) {
            boolean success = org.apache.commons.io.FileUtils.deleteQuietly(files[i]);
            System.out.println(files[i] + " delete result = " + success);
        }

Вот результат:

files found: 1
/home/abhijith/.img/abc.jpg delete result = true
person Abhijith S    schedule 28.05.2018