javaでファイルを削除したいのですが、この結果が生成されます。ファイルを削除するにはどうすればよいですか。そして、これの理由は何ですか。
File l_file = new File(path);
System.out.println(l_file.exists()); //returns true
System.out.println(l_file.delete()); //returns false
ありがとうございました。
javaでファイルを削除したいのですが、この結果が生成されます。ファイルを削除するにはどうすればよいですか。そして、これの理由は何ですか。
File l_file = new File(path);
System.out.println(l_file.exists()); //returns true
System.out.println(l_file.delete()); //returns false
ありがとうございました。
ファイルの削除が失敗する理由は複数あります。たとえば、別のプロセスがハンドルを保持している場合、またはこのファイルを削除する権限がない場合です。どちらのシナリオでも、ファイルの存在を確認できますが、削除することはできません。
最初の理由は、path
がディレクトリになる可能性があることです
javadoc からFile#delete()
:
If this pathname denotes a directory, then the directory must be empty in order to be deleted.
パスが空のディレクトリではないかどうかを確認します。
if (l_file.isDirectory()) {
String[] files = l_file.list();
if (files.length > 0) {
System.out.println("The " + l_file.getPath() + " is not empty!");
}
}
を削除できなかったもう1つの理由path
は、許可がないことです。
許可を確認してください。
if (l_file.canWrite())
l_file.delete();
File
たぶん、次の方法を使用して、それがファイル(ディレクトリではない)であるかどうか、そのアクセス許可を確認することができます。
boolean isFile() // if it is a directory it must be empty
boolean canWrite()
boolean canRead()
boolean canExecute()
さらに、Java APIで読むことができるように、「一部のオペレーティングシステムでは、ファイルが開いていて、このJava仮想マシンまたは他のプログラムで使用されているときにファイルを削除できない場合があります。」
Linuxを使用している場合は、lsof <file_name>
どのプロセスがこのファイルを開いたかを知るために試すことができます。
または、ロックを削除する前にロックを取得できるかどうFileChannel.lock()
かを確認することもできます。FileChannel.tryLock()
それを解決するには2つの方法があります。
.Close
ファイルを削除できない理由は多数あります。最も可能性が高いのは、ファイルが別のプロセスで開かれているか、そのファイルを削除するために必要な権限よりも低い権限でプロセスが起動されたことです。