Beanオブジェクトをcsv/txt形式のファイルに変換する際に問題が発生しました。私は明示的に新しい行の文字を '\ r \ n'と指定しています。これは、開いているcsvライターの行末の文字で上書きされます。オープンCSVライターを使用してJavaのBeanオブジェクトからtxtファイルを生成する際に余分なキャリッジリターンが追加されました
Windows上で動作しているローカルのtomcat
サーバですべて正常に動作しています。つまり、各レコードの後にCRとLFが表示されています。しかし、Linuxベースマシンでcsv/txtファイルを作成しようとすると、 1つのレコードがで区切られているということです。つまり、アフターレコーディング後に余分なCRが追加されたということです.CRLFがほしいだけです。コードと構成は、ローカルマシンとリモートマシンで同じです。唯一の違いは、基盤となるOSです。その行のデータに問題はありません。
間違った出力ファイルにはscreenshotが添付されています(これは正確ではありませんが、約450行のうち正確ではありませんが、112行目に問題があります)。私は当初、問題のある特定の行に最後のゼロ(0)のキャリッジリターン文字がありますが、コードを深くチェックして、ゼロ(0)が固定値であるためデータに問題がないことを発見しました。どのデータベースからも選択されません。この修正値は、JAVA Constantファイルから読み取られ、各行ごとに同じです。問題があれば、それはすべての行にあったでしょう。
これはなぜ起こっているのですか?私はau.com.bytecode.opencsv.CSVWriter#writeAll(List allLines) API
を使用しています。このライターのデフォルト行の終了文字は"\n"
(つまりLF)です。上で述べたように、これは私のコードで"\r\n"(i.e. CRLF)
でオーバーライドしました。 WindowsとLinuxで異なる新しい行マーカーのいくつかのシステムデフォルト設定を選んでいますか?その場合、なぜ私が環境変数のすべてのタイプに対してrecordTerminatorを明示的に指定したのですか?それが事実なら、どうすればこの問題を解決できますか?本当にありがとうございます。ありがとうございました。
返信いただきありがとうございます。私の前のコメントで述べたように、値は大丈夫です。私自身は同じ疑問を抱いていましたが、既に述べたように、値に余分なCRが含まれていた場合、すべての行に同じゼロを使用しているので、1行ではなくすべての行になります。 – user6328124
親愛なるJeronimo Backes、特別なCRが(Linux環境で)単一行のみで追加される理由を教えてください。生成しているファイルがシステムによって読み取られていないため、このファイルは私たちと管理していない外部システムによって読み取られるため、ユーザーパーサーは使用できません。このようなシナリオを処理するための提案はありますか? – user6328124
私はあなたが必要とするものが明確ではありません。あなたにとって問題のある動作と、期待される出力がどのようなものかを示す例を挙げてください。私はあなたを喜んで助けます。 –