디렉토리의 모든 파일을 반복하여 삭제하는 다음 Java 코드가 있습니다.Java File.delete()가 모든 파일을 삭제하지 않습니다.
그러나 모든 파일을 삭제하지는 않습니다. 내가 이것을 할 때, 보통 20 ~ 30 명 중 몇 명이 뒤쳐져 있습니다. 이 문제를 해결할 수 있습니까? 아니면 혼자 남겨 두는 Java 부두를 발견했을까요?
디렉토리의 모든 파일을 반복하여 삭제하는 다음 Java 코드가 있습니다.Java File.delete()가 모든 파일을 삭제하지 않습니다.
그러나 모든 파일을 삭제하지는 않습니다. 내가 이것을 할 때, 보통 20 ~ 30 명 중 몇 명이 뒤쳐져 있습니다. 이 문제를 해결할 수 있습니까? 아니면 혼자 남겨 두는 Java 부두를 발견했을까요?
System.gc();
을 사용하여 가비지 수집기를 강제 실행하면 모든 파일을 삭제할 수 있습니다.
이것은 해결책이지만이 작업을 수행하는 것이 "괜찮습니까"? – Mafro34
닫는 것을 잊은 파일을 찾을 때까지이 문제가 발생했습니다. 평상시와 같이 원하는 동작을 위해 가비지를 수집해야하는 경우 자원 누출이 있습니다. –
하지만 System.gc() 호출; 쓰레기 수거가 잠시 일어나는 것을 보장하지 않습니다. –
boolean
값을 반환하면 확인해야합니다. JavaDoc에서 :
반환 : 파일 또는 디렉토리가 성공적으로 삭제 된 경우에만 true입니다. 그렇지 않으면 false
반환 값을 확인하고 조치를 취해야합니다.
false
을 반환하면 파일을 삭제할 수있는 권한이없는 것일 수 있습니다.
이 경우 응용 프로그램에서 파일을 쓸 수 있는지 여부를 확인할 수 있으며 쓰기가 가능하지 않은 경우 다시 boolean
을 반환합니다. 성공하면 다시 삭제할 수 있습니다. 나는 또한 JavaDoc을 자신의 조언을 걸릴 것
private void deleteFile(final File f) throws IOException {
if (f.delete()) {
return;
}
if (!f.canWrite() && !f.setWritable(true)) {
throw new IOException("No write permissions on file '" + f + "' and cannot set writeable.");
}
if (!f.delete()) {
throw new IOException("Failed to delete file '" + f + "' even after setting writeable; file may be locked.");
}
}
:
당신은 유틸리티 방법을 사용할 수있는 IOException가 던져
참고 파일 클래스가 삭제 방법을 정의하는을 때 파일을 삭제할 수 없습니다. 이는 오류 보고 및 파일을 삭제할 수없는 이유를 진단 할 때 유용합니다.
Java 7을 사용하는 경우. Oracle tutorial page에서 촬영
try {
Files.delete(path);
} catch (NoSuchFileException x) {
System.err.format("%s: no such" + " file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
System.err.format("%s not empty%n", path);
} catch (IOException x) {
// File permission problems are caught here.
System.err.println(x);
}
예 : 그 방법은 당신이 처리 할 수있는 예외의 수를 던졌습니다.
나는 왜 사람들이 이것을 상상하지 않는지 모르겠다. 그것은 OP의 질문에 대답하지 않습니다, 그것은 의견에 더 적합합니다. –
거기에 약 절반 방법을 얻을 – clwhisk
나는 이것을 시도했지만 false를 반환하지 않으므로 파일을 삭제할 때 "오류"가 발생하지 않습니다. 루프가 반복하고 삭제할 때 파일이 보이지 않는 것 같습니다. – user1049697
BufferedReader/Writer, FileReader/Writer 등 열린 스트림이 없는지 확인하십시오. 먼저 파일을 닫으면 파일을 삭제할 수 있습니다. 다시 한 번 예를 들어 FileReader와 같은 다른 판독기를 통해 BufferedReader를 여는 경우 별도로 두 판독기를 모두 닫아야합니다. 그래서 그 대신이의
:
BufferedReader reader = new BufferedReader(new FileReader(new File(filePath)););
이 작업을 수행 :
BufferedReader bufferedReader = null;
FileReader fileReader = null;
try{
fileReader = new FileReader(readFile);
bufferedReader = new BufferedReader(fileReader);
}catch{...}
...
try {
fileReader.close();
bufferedReader .close();
readFile.delete();
} catch (IOException e) {
e.printStackTrace();
}
어쩌면 당신은 파일을 삭제할 수있는 권한이 없습니다. 또는 잠겨 있거나 다시 만들어 지거나 다른 것이 생깁니다. 삭제가 성공했는지 여부를 알기 위해 반환 값을 확인하십시오. 또한 삭제하려면 디렉토리가 비어 있어야한다고 생각하십시오. –
오류가 있습니까? 어떤 파일이 삭제되지 않습니까? – WhileTrueSleep
모든 파일을 수동으로 삭제할 수 있습니까? 일부 프로그램이 다른 프로그램을 사용하기도합니다. 예외를 잡으려고 시도하십시오 : _ "Files 클래스는 파일을 삭제할 수 없을 때 IOException을 throw하는 delete 메소드를 정의합니다. 이는 오류보고 및 파일을 삭제할 수없는 이유를 진단하는 데 유용합니다."_ –