Tomcatサーバーconf/Catalina/localhostにあるファイルをJava codeから削除しようとすると、file.delete()は常にfalseを返します。ただし、ファイルごとにファイルをチェックしている場合.exists()関数はtrueを返します。例外は発生しません。これが発生している理由を教えてください。これに対する解決策は何ですか?
Tomcatサーバーのconf/Catalina/localhostにあるファイルをJava codeから削除しようとすると、file.delete()は常にfalseを返します。ただし、ファイルごとにファイルをチェックしている場合.exists()関数はtrueを返します。
サーバー上のファイルを削除するためのpermissionがない可能性があります。権限を確認してください。
f.delete()
はfalseを返します。これは削除されなかった、または削除できなかったことを意味し、f.exists()
はtrueを返すため、ファイルは存在しますが削除できません。
ファイルを削除できない理由はいくつかあります。存在しない可能性があります。空ではないディレクトリである可能性があります。そのディレクトリを使用しているすべてのリソースを閉じていない可能性があります。プログラムには、いくつかの例を挙げれば、それを行う権限がない可能性があります。
残念ながら File.delete()
メソッドは、その理由についてほとんど情報を提供しません。ざっと見て理解するのはあなた次第です。しかし、良いニュースがあります。そもそもFile
を使いたくない。
Java 7では、より堅牢なファイルアクセスAPIである新しい _Java.nio.file
_ パッケージが導入されました。抽象 Path
の概念を提供し、具体的な操作を Files
クラスに分離します。特に Files.delete()
削除が失敗する理由を説明する明確な例外を発生させるために文書化されています。
Path
およびFiles
を使用します。よろしくお願いします。
削除する前にストリームを閉じる必要があります。
例-
fileInputStream.close();
file.delete();
ディレクトリが空でない場合、File.delete()
メソッドはエラーをスローせずにfalseを返します。
削除する前に、ディレクトリをクリーンアップする必要があります。
ファイルを削除する前に、100%ファイルが削除された後、すべてのファイルの読み取りおよび書き込み接続を閉じる必要があります。たとえば、bufferedreader.close()inputstream.close()
一時的にJava.nio.Files.delete
でファイルを削除し、try/catchブロックを追加してください。実行、スローされた例外を確認...
それはファイルが存在することを意味しますが、あなたのJavaプロセスにはそれを削除する権限がありません。そのため、削除機能がfalseを返します
Returns: true if and only if the file or directory is successfully deleted; false otherwise