1

jcifsライブラリ-sambaのものを使用してリモートマシンのファイルシステムにファイルを書き込むJavaプログラムがあります。SmbFile => SmbFileOutputStream => PrintStreamと私は一般的なprintln(String)を使用します。アプリケーションをLinuxマシンに移動するまではすべて正常に機能し、リモートWindowsマシンで印刷されたファイルが奇妙に見えるようになりました。

問題は、2つのOSがprintln()関数によって挿入されたCR、LFをどのように処理するかであると思います。私の「jar」は1日に1回実行され、「sh」起動ファイルを介して「crontab」によってトリガーされます。

  • Javaコードに触れることなく問題を修正する方法はありますか?
  • 両方の種類のOS(おそらくすべて)で動作するようにJavaプログラムを作成する方法はありますか?

ありがとうございました

4

4 に答える 4

4

システム プロパティ"line.separator"をいじってみてください。これを参考に読めます。

于 2011-06-23T18:11:27.190 に答える
0

Java ファイルが Linux マシンで実行される場合、println は Linux 標準の "\n" を使用します。システム プロパティを変更せずに常に \r\n を使用する場合は、単に println("text") を print("text \r\n")。または、それを行うカスタム関数 printWindowsLine を作成します

于 2011-06-23T18:14:02.397 に答える
0

ファイル内の改行区切りを変更する必要があります。Linux には、既存のファイルの改行区切り文字を dos/windows から linux/unix に変換するdos2unixというユーティリティがあります。

于 2011-06-23T18:14:36.910 に答える
0

System.out.println は PrintStream であり、 line.separatorの環境設定を行区切りとして使用します。問題の解決策の 1 つは、 -Dline.separator 引数を渡すことです。

おそらく最善の解決策は、より優れたエディターでファイルを表示することです。Windows の Notepad++ やその他の多くは、両方のタイプの行末を理解できますが、メモ帳は理解できません。組み込みのワードパッドでさえ、UNIX ファイルの末尾をより適切に表示します。

于 2011-06-23T18:15:18.737 に答える