55

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();
}
4

6 に答える 6

62

Javaは、現在実行されているプラ​​ットフォームについてのみ認識しているため、(を使用してbw.newLine())そのプラットフォームでプラットフォームに依存する出力のみを提供できます。Windowsシステムで開くということは、使用する前にファイルを変換するか(作成したものを使用するか、unix2dosなどのプログラムを使用する)、またはWindows形式のキャリッジリターンでファイルを出力する必要があることを意味します。もともとはJavaプログラムにあります。したがって、ファイルが常にWindowsマシンで開かれることがわかっている場合は、出力する必要があります。

bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.write("\r\n");

使用しているプレーンテキストの場合、両方のプラットフォームで正しく表示されるファイルを出力できないことに注意してください。電子メールの場合はhtml、電子メールの場合はxmlの使用を検討してください。データです。または、データを読み取り、ビューアが使用しているプラ​​ットフォーム用にデータをフォーマットする、ある種のクライアントが必要になる場合があります。

于 2010-05-14T08:44:48.297 に答える
7

この方法newLine()により、プラットフォーム互換の新しい行が確実に追加されます ( 0Dh 0AhDOS 用、0Dh古い Mac0Ah用、Unix/Linux 用)。Java は、テキストを送信するプラットフォームを知る方法がありません。この変換は、メール送信エンティティが処理する必要があります。

于 2010-05-14T08:30:03.987 に答える
4

誰があなたのファイルを見ているのかわかりませんが、メモ帳ではなくワードパッドで開くと、改行が正しく表示されます。特別なファイル拡張子を使用している場合は、それをワードパッドに関連付ければ完了です。または、他のより高度なテキスト エディターを使用します。

于 2010-05-14T13:55:22.223 に答える
2

bw.newLine();すべてのシステムとの互換性を保証することはできません。

Windowsで開くことが確実な場合は、windowsnewlineにフォーマットできます。

すでにネイティブのUNIXコマンドを使用している場合は、unix2dosすでに生成されているファイルをWindows形式に変換してから、メールを送信してください。

UNIXコマンドを使用しておらず、Javaで使用する場合は、 `` bw.write( "\ r \ n") `を使用します。プログラムが複雑にならない場合は、オペレーティングシステムを検索して書き込みを行うメソッドを用意します。適切な改行。

于 2010-05-14T08:44:20.213 に答える
2

あなたの理解が正しければ、テキスト ファイルの添付ファイルについて話します。それが電子メールのメッセージ本文である場合、 http: //www.faqs.org/rfcs/rfc822.html を参照して、いつでも「\r\n」を使用できるため、これは残念です。

でも執着ですから、システムの違いを受け入れなければなりません。私があなたの立場なら、次の選択肢のいずれかを選択します。

a) 行末として「\r\n」を使用することにより、Windows クライアントのみをサポートします。

b) 2 つの添付ファイル (1 つは Linux 形式、もう 1 つは Windows 形式) を提供します。

c) 添付ファイルを人が読むのか機械が読むのかわかりませんが、人が読む場合は、プレーン テキストではなく HTML ファイルを添付することを検討します。より移植性が高く、よりきれいです:)

于 2010-05-14T09:16:56.160 に答える
0

次のように、ライターをカプセル化して文字置換を提供します。

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();
    }

}
于 2017-09-11T12:23:16.190 に答える