У меня нет прямого ответа (и я тоже не думаю, что это так, это контролируется на уровне ОС (native), а не на уровне JVM), и я также не вижу значения ответа (вы все равно не можете закрыть файл программно, как только узнаете, какой поток он есть), но я думаю, вы еще не знаете, что невозможность удалить обычно возникает, когда файл все еще открыт. Это может произойти, если вы делаете , а не, прямо называть Closeable#close()
на InputStream
, OutputStream
, Reader
или Writer
, который строится вокруг соответствующего File
.
Basic демо:
public static void main(String[] args) throws Exception {
File file = new File("c:/test.txt"); // Precreate this test file first.
FileOutputStream output = new FileOutputStream(file); // This opens the file!
System.out.println(file.delete()); // false
output.close(); // This explicitly closes the file!
System.out.println(file.delete()); // true
}
Другими словами, убедитесь, что на протяжении всей вещи Java IO код правильно закрытия ресурсов, после использования. The normal idiom должен сделать это в the try-with-resources
statement, так что вы можете быть уверены, что ресурсы все равно будут освобождены, даже в случае IOException
. Например.
try (OutputStream output = new FileOutputStream(file)) {
// ...
}
ли это для любойInputStream
, OutputStream
, Reader
и Writer
, и т.д. все, реализующего AutoCloseable
, который вы открываете себя (используя ключевое слово new
).
Это технически не требуется в некоторых вариантах реализации, такие как ByteArrayOutputStream
, но ради ясности, просто приклеить рукопашную-наконец идиому везде, чтобы избежать недоразумений и рефакторинга-ошибки.
В случае, если вы не на Java 7 или новее, используйте вместо этого ниже try-finally
idiom.
OutputStream output = null;
try {
output = new FileOutputStream(file);
// ...
} finally {
if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
}
Надеюсь, что это поможет устранить основную причину вашей конкретной проблемы.
файлы lokced процессом, а не потоком. Как уже упоминалось, вы должны закрыть файл, прежде чем сможете его удалить. Я предлагаю вам начать, глядя, где файл открыт. –