Проблема с удалением файлов

У меня есть этот код, который должен удалить файлы из каталога и самого каталога:

private static void removeTempFiles(File dir){
        if(!dir.exists())
            return;
        if(dir.isDirectory()){
            for(File f : dir.listFiles())
                removeTempFiles(f);
            dir.delete();
        }
        else {
            dir.delete();
        }
    }

но выполнение этого кода не удаляет все файлы. Время от времени удаляет все файлы с папки или удаляет только несколько файлов

UPD: вот мой код создания файла:

 File tempFolder = new File(tempPath);
    tempFolder.mkdir();
    tempFolder.mkdirs();    
    FileOutputStream fileOut = new            FileOutputStream(tempPath+"/"+fileName);    
        OutputStreamWriter osw = new OutputStreamWriter(fileOut, "windows-1251");
            try{
                osw.write(file64);
            } catch (IOException e){
                e.printStackTrace();
            }finally {
osw.close();
                fileOut.close();
            }

person Nikitin Mikhail    schedule 27.02.2015    source источник
comment
Наверное разрешения..   -  person Koray Tugay    schedule 27.02.2015
comment
возможный дубликат stackoverflow.com/questions/3775694/deleting-folder-from- Java   -  person nafas    schedule 27.02.2015
comment
Вы имеете в виду stackoverflow.com/questions/779519/ ?   -  person merours    schedule 27.02.2015
comment
@fxm и это тоже :)   -  person nafas    schedule 27.02.2015
comment
Вы можете проверить значение, возвращаемое delete(), и зарегистрировать его, если оно возвращает false.   -  person Ocracoke    schedule 27.02.2015
comment
@KorayTugay с разрешениями все в порядке. и, как вы видите выше, он время от времени удаляет файлы   -  person Nikitin Mikhail    schedule 27.02.2015
comment
@nafas thesolution descrybed выдает исключение, которое не может удалить файл   -  person Nikitin Mikhail    schedule 27.02.2015
comment
@NikitinMikhail хорошо, приятель, кажется, я знаю, в чем проблема, ответь на этот вопрос: эти файлы используются из внешних процессов? если так, то они были заблокированы теми. они используются внутрь? если да, то вы не закрыли буферы   -  person nafas    schedule 27.02.2015
comment
@nafas смотри. Я добавил немного кода. что касается их использования в другом процессе - нет   -  person Nikitin Mikhail    schedule 02.03.2015
comment
Под какой ОС это происходит?   -  person yole    schedule 02.03.2015
comment
@NikitinMikhail, если поведение случайное, попробуйте добавить немного ожидания в вашу программу.   -  person nafas    schedule 02.03.2015
comment
@nafas представьте, что это приложение будет создавать и удалять сотни файлов. что может случиться, если я добавлю ожидание   -  person Nikitin Mikhail    schedule 03.03.2015
comment
@NikitinMikhail создавать и удалять рискованно. дело не только в java. есть так много вещей на разных уровнях, которые могут пойти не так. если у вас проблемы со скоростью, попробуйте создавать файлы одновременно, но добавляйте ожидание после создания и удаления каждого файла.   -  person nafas    schedule 03.03.2015
comment
@nafas wait отбрасывает исключение «java.lang.IllegalMonitorStateException at java.lang.Object.wait (собственный метод)». мне не нужны гусеницы   -  person Nikitin Mikhail    schedule 03.03.2015


Ответы (1)


В Windows удаление файлов не всегда удается, поскольку файлы могут быть заблокированы различными службами, работающими в системе (антивирус, поисковое индексирование и т. д.). Вам нужно добавить цикл повтора вокруг каждого вызова удаления файла.

person yole    schedule 03.03.2015
comment
Вы имеете в виду делать это до тех пор, пока file.delete не станет истинным? - person Nikitin Mikhail; 04.03.2015
comment
Обычно вы не хотите делать бесконечное количество попыток. 10 попыток обычно нормально. - person yole; 04.03.2015
comment
@ Я только что создал цикл, пока file.delete не станет истинным, и он все еще работает. гораздо больше, чем 10 попыток - person Nikitin Mikhail; 04.03.2015
comment
Затем файл фактически блокируется каким-то другим процессом. Вы можете использовать Process Explorer, чтобы проверить, какой процесс открыл файл. - person yole; 04.03.2015
comment
нет процессов, использующих этот файл, когда мое приложение не запущено. и когда приложение работает, я имею в виду, когда цикл удаления выполняет какой-то «несуществующий процесс», который, я думаю, является самим приложением - person Nikitin Mikhail; 04.03.2015
comment
и что интересно, только один из двух созданных одновременно файлов не может быть удален. - person Nikitin Mikhail; 04.03.2015