2017-01-11 7 views
0

iTextのバージョンを5.0から5.5.9にアップグレードしました。その後、私たちはFile.renameTo呼び出しで問題に直面しています。その虚偽を返す。iTextのアップグレード後にFile.renameTo()がfalseを返す

以前のバージョンのiTextを元のバージョンに戻しても正常に動作しています。

iTextがPDFをマージすると、それらのpdfは別のフォルダに移動さ​​れません。

+2

コードの関連部分を追加してください。 –

+0

ありがとうございます。スニペットをここに追加することはできません。 falseを返すのは通常のFile.renameTo(sourceFilePath、targetFilePath)呼び出しです。私はiTextがファイルロックを開いたままにしていると感じています。 –

+0

問題を表示するには[mcve]と記入してください。デバッグのヘルプを探す質問( "なぜこのコードは動作しませんか?")には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。 – AxelH

答えて

0

Windowsでコードを実行している場合、ファイルが正しく閉じられていない可能性があります。ガベージコレクタを使用してコードを実行している可能性があります。 この仮説をチェックするためにLinux上で同じプログラムを実行しようとするかもしれません。

これは、iTextの回帰である可能性があります。以前のバージョンのiTextでもコードが壊れていましたが、実装の違いにより、File.renameToを呼び出す前にガベージコレクタがそのジョブを実行しました。

あなたの投稿のコメントに記載されているように、単一の行File.renameTo(sourceFilePath, targetFilePath)はあなたの問題を理解するのに十分ではありません。問題を理解するためには、文脈が必要です。このメソッドの動作の

多くの側面は、本質的に、プラットフォームに依存している:名前の変更操作を別のファイルシステムからファイルを移動することはできないかもしれません、それはJavaのドキュメントが言うリマインダとして

アトミックではない可能性があり、宛先抽象パス名のファイルがすでに存在する場合、成功しない可能性があります。名前変更操作が成功したことを確認するには、戻り値を常にチェックする必要があります。

Filesクラスは、ファイルをプラットフォームに依存しない方法で移動または名前を変更するmoveメソッドを定義しています。

+0

答えをありがとう。はい、私はWindowsでコードを実行しています。 Fileが正しく閉じられていることを確認するにはどうすればよいですか?私はそのファイルをFISに入れようとしてストリームを閉じました。それでも同じ問題に直面した。ガベージコレクタを手動で呼び出そうとしますか? 私はFiles.moveを試しましたが、jarファイルをインクルードしてもクラスのdefにエラーが見つかりませんでした。 ところで、私はちょうど1つのフォルダから、同じドライブ内の別のフォルダに移動しています。明らかにプラットフォームに依存しないだろう。 –

+0

自分とAxelHの要求に応じて、コードの関連部分を投稿すると、ファイルが閉じられているかどうかを確認できます。 –

+0

これはiText 5.5.9から起こったので、私はOSにあまりにも速くフォールトを置かないでしょう、OSは私がバージョンと仮定して変わっていませんでした;)。はい、 'renameTo'はバグかもしれませんが、これは特定のOSで簡単に確認できます。 – AxelH

関連する問題