4

javaでファイルを削除したいのですが、この結果が生成されます。ファイルを削除するにはどうすればよいですか。そして、これの理由は何ですか。

File l_file = new File(path);
System.out.println(l_file.exists()); //returns true
System.out.println(l_file.delete()); //returns false

ありがとうございました。

4

6 に答える 6

1

ファイルの削除が失敗する理由は複数あります。たとえば、別のプロセスがハンドルを保持している場合、またはこのファイルを削除する権限がない場合です。どちらのシナリオでも、ファイルの存在を確認できますが、削除することはできません。

于 2013-01-30T12:17:47.347 に答える
0

最初の理由は、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();
于 2013-01-30T12:22:35.097 に答える
0

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>どのプロセスがこのファイルを開いたかを知るために試すことができます。

于 2013-01-30T12:24:18.470 に答える
0

または、ロックを削除する前にロックを取得できるかどうFileChannel.lock()かを確認することもできます。FileChannel.tryLock()

于 2013-01-30T13:17:24.830 に答える
0

それを解決するには2つの方法があります。

  1. ファイルに移動し、そのプロパティをフル コントロールに変更します
  2. クラス PrintWriter または Scanner を開いた場合は、クラス、特に Scanner オブジェクトを閉じる必要があります.Close ここに画像の説明を入力
于 2018-12-13T01:48:24.917 に答える
0

ファイルを削除できない理由は多数あります。最も可能性が高いのは、ファイルが別のプロセスで開かれているか、そのファイルを削除するために必要な権限よりも低い権限でプロセスが起動されたことです。

于 2013-01-30T12:18:46.773 に答える