Java のキャリッジ リターン/ライン フィード
-
26-09-2019 - |
質問
Javaコードを使用してUnix環境でテキストファイルを作成しました。
私が使用しているテキストファイルの書き込みに java.io.FileWriter
そして BufferedWriter
. 。そして、私が使用している各行の後の改行には bw.newLine()
メソッド (ここで bw
の対象です BufferedWriter
).
そして、そのテキストファイルをUnix環境自体からメールに添付して送信しています(Unixコマンドを使用して自動化しました)。
私の問題は、Windowsシステムのメールからテキストファイルをダウンロードした後、そのテキストファイルを開いた場合、データは適切に並べられていません。 newline()
キャラクターが機能していないと思います。
Windows環境でテキストファイルも開いた場合、UNIX環境と同じテキストファイルのアライメントが必要です。
問題を解決するにはどうすればよいですか?
参考までに以下の Java コード (Unix 環境で実行):
File f = new File(strFileGenLoc);
BufferedWriter bw = new BufferedWriter(new FileWriter(f, false));
rs = stmt.executeQuery("select * from jpdata");
while ( rs.next() ) {
bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.newLine();
}
解決
Javaのみぞ知るセカイのための技術基盤ができたのでは現在実行中に発表されることが多く、できるだけするプラットフォームに依存する出力するプラットフォーム(使用 bw.newLine()
).このままでは、windowsシステムをすることになりますのでどちらかいに変換するファイルを利用する前に使用するようなものを書いてい、ようなプログラム unix2dosやす出力ファイルwindows形式の運送を返しまれたJavaプログラム。いがわかっている場合は、それをファイルは常にオープンにされるwindowsマシンまたは出力
bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.write("\r\n");
このことは特筆に値するか出力できるようになり、ファイルをうまく修正両プラットフォームの場合は平文テキストを使用する場合があります利用をお考えのhtmlの場合は電子メール、xmlの場合はデータです。また、お客様の必要があるかのようなクライアントデータを読み取り、その形式でのプラットフォームのビューアです。
他のヒント
の方法 newLine()
を確保し、プラットフォーム対応の新しいラインが加えられた0Dh 0Ah
DOS, 0Dh
古いMac 0Ah
Unix/Linuxで共通)。Javaりうるプラットフォームがお送りします。この変換をしている事が分かったのでメールにて送ります。
あなたのファイルを見て誰か分からないのですが、あなたの代わりにメモ帳でワードパッドで開く場合は、改行が正しく表示されます。あなたは特別なファイル拡張子を使用している場合は、ワードパッドに関連付けて、あなたはそれで終わりました。または任意の他のより高度なテキストエディタを使用します。
bw.newLine();
すべてのシステムとの互換性を確保することはできません。
あなたは必ずそれが窓で開くことになるだろうしている場合は、Windowsの改行にそれをフォーマットすることができます。
すでにネイティブUNIXコマンドを使用している場合は、は、unix2dos
を試してみて、Windows形式にTEH、既に生成されたファイルを変換してからメールを送信します。
あなたは、UNIXのコマンドを使用してJavaでそれを行うことを好む、使用 `` bw.write(「\ rを\ n」は) `と、それは、オペレーティング探し出すという方法を持って、あなたのプログラムを複雑にしない場合はされていない場合システムとは、適切な改行を書き込みます。
私の理解が正しければ、ここで話しているのはテキスト ファイルの添付ファイルについてです。それが電子メールのメッセージ本文であれば、いつでも「 」を使用できるため、これは残念です。 http://www.faqs.org/rfcs/rfc822.html
しかし、付属品である以上、システムの違いを受け入れなければなりません。私があなたの立場だったら、次の選択肢のいずれかを選択します。
a) 行末として「 」を使用する Windows クライアントのみをサポートします。
b) 2 つの添付ファイルを提供します。1 つは Linux 形式、もう 1 つは Windows 形式です。
c) 添付ファイルを人間が読むのか機械が読むのかはわかりませんが、人間の場合はプレーン テキストの代わりに HTML ファイルを添付することを検討します。より持ち運びやすく、さらに見た目も美しくなります:)
カプセル化あなたのライター
public class WindowsFileWriter extends Writer {
private Writer writer;
public WindowsFileWriter(File file) throws IOException {
try {
writer = new OutputStreamWriter(new FileOutputStream(file), "ISO-8859-15");
} catch (UnsupportedEncodingException e) {
writer = new FileWriter(logfile);
}
}
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
writer.write(new String(cbuf, off, len).replace("\n", "\r\n"));
}
@Override
public void flush() throws IOException {
writer.flush();
}
@Override
public void close() throws IOException {
writer.close();
}
}