2016-05-12 8 views
0

私はレポートを生成し、電子メールでユーザーに送信しようとしています。このプロセスは1人のユーザーにとってうまく機能します。しかし、1人以上のユーザーにレポートを送信しようとすると、レポートを再生成する必要があり、そのためにサーバーに保存されている以前のレポートを削除する必要があります。だから私は次のコードを使用しています。filename.delete()はJAVAでfalseを返します

if(newFileName.exists()){ 
    System.out.println("file delete: "+newFileName.delete()); 
} 

しかし、それは私に間違いを与えます。したがって、第2のユーザは、第1のユーザが得たものと同じレポートを受信する。私はたくさんの解決策を探しました。すべてが失敗しています。誰でも私にこれを助けることができますか?

+0

ファイル(getAbsolutePath())のabsolutePathを最初に取得しようとしましたか?開いているFileInputStreamを閉じますか? –

+0

このAPIを使用する必要はありません。新しい 'FileOutputStream'か' FileWriter'か 'PrintWriter'を作成するだけです。オープンできない場合は、ブール値だけでなく、有益な例外もあります。 – EJP

答えて

1

ファイルがまだプロセスで使用されているため、ファイルを削除できないと確信しています...まだこのファイルで開いているストリームがないかどうかを確認してください。

または、サーバー上のファイルを削除するための十分な権限がありません。これもチェックしてください。

てみPathオブジェクトを使用すると、あなたは問題を抱えている理由の詳細を持っているためにこれを使用する:(アップのJava 7と)

try { 
    Files.delete(newFileName.toPath()); 
} catch (NoSuchFileException x) { 
    System.err.format("%s: no such" + " file or directory%n", path); 
} catch (DirectoryNotEmptyException x) { 
    System.err.format("%s not empty%n", path); 
} catch (IOException x) { 
    // File permission problems are caught here. 
    System.err.println(x); 
} 

コードはこちらから:https://docs.oracle.com/javase/tutorial/essential/io/delete.html

たぶん最善の解決策があります互いに異なる名前のファイルを生成するには?

+0

実際には、同じ名前のファイルを別のコンテンツで送信する必要があります。ストリームが開いているかどうか確認してみましょう。 –

+0

それは働いている!ありがとうGuillaume。 ** InputStream **を使用してサーバー上のファイルをアップロードしました。しかし、私はそれを閉じるのを忘れました。 –

+0

完璧!投票することを忘れないでください:) – Guillaume

関連する問題