web-dev-qa-db-ja.com

java file.delete()はfalseを返しますが、file.exists()はtrueを返します

Tomcatサーバーconf/Catalina/localhostにあるファイルをJava codeから削除しようとすると、file.delete()は常にfalseを返します。ただし、ファイルごとにファイルをチェックしている場合.exists()関数はtrueを返します。例外は発生しません。これが発生している理由を教えてください。これに対する解決策は何ですか?

19
vishal

Tomcatサーバーのconf/Catalina/localhostにあるファイルをJava codeから削除しようとすると、file.delete()は常にfalseを返します。ただし、ファイルごとにファイルをチェックしている場合.exists()関数はtrueを返します。

サーバー上のファイルを削除するためのpermissionがない可能性があります。権限を確認してください。

f.delete()はfalseを返します。これは削除されなかった、または削除できなかったことを意味し、f.exists()はtrueを返すため、ファイルは存在しますが削除できません。

16
Simon Dorociak

ファイルを削除できない理由はいくつかあります。存在しない可能性があります。空ではないディレクトリである可能性があります。そのディレクトリを使用しているすべてのリソースを閉じていない可能性があります。プログラムには、いくつかの例を挙げれば、それを行う権限がない可能性があります。

残念ながら File.delete() メソッドは、その理由についてほとんど情報を提供しません。ざっと見て理解するのはあなた次第です。しかし、良いニュースがあります。そもそもFileを使いたくない。

Java 7では、より堅牢なファイルアクセスAPIである新しい _Java.nio.file_ パッケージが導入されました。抽象 Path の概念を提供し、具体的な操作を Files クラスに分離します。特に Files.delete() 削除が失敗する理由を説明する明確な例外を発生させるために文書化されています。

PathおよびFilesを使用します。よろしくお願いします。

11
dimo414

削除する前にストリームを閉じる必要があります。

例-

fileInputStream.close();
file.delete();
6
vsharma

ディレクトリが空でない場合、File.delete()メソッドはエラーをスローせずにfalseを返します。

削除する前に、ディレクトリをクリーンアップする必要があります。

3
Akshay Shinde

ファイルを削除する前に、100%ファイルが削除された後、すべてのファイルの読み取りおよび書き込み接続を閉じる必要があります。たとえば、bufferedreader.close()inputstream.close()

0
JOCKER

一時的にJava.nio.Files.deleteでファイルを削除し、try/catchブロックを追加してください。実行、スローされた例外を確認...

0
Phantom Lord

それはファイルが存在することを意味しますが、あなたのJavaプロセスにはそれを削除する権限がありません。そのため、削除機能がfalseを返します

Returns: true if and only if the file or directory is successfully deleted; false otherwise

0
Renjith