JavaでCSV出力時の文字コード改行コードについて

このQ&Aのポイント
  • JavaでCSVを出力する際に、文字コードと改行コードの設定に関して不都合があります。
  • 現在のコードでは、Unix環境で文字コードSJISで改行コードLFで出力されますが、Windows環境でもUnix環境でも一律、文字コードSJISで改行コードCRLFで出力されるようにしたいです。
  • 一行ずつ変更せずに一括で設定する方法はありますか?
回答を見る
  • ベストアンサー

javaにおけるCSV出力時の文字コード改行コード

JavaでCSVを出力する処理を作りました。 下記コードだとUnix環境で文字コードSJISで改行コードLFで出力されますが、 Windows環境でもUnix環境でも一律、文字コードSJISで改行コードCRLFで出力されるようにしたいです。 何かいい方法はありませんでしょうか。 なお、printlnで出力している行が多い為、 bw,Print("日付" + 変数A + \r\n); というふうに一行づつ変更するのは避けたいと思っております。 try{ PrintWriter bw = new PrintWriter(new BufferdWriter(new OutputStreamWriter(new FileOutputStream(/tmp/test.csv),"SJIS"))); bw.println("日付" + 変数A); bw.println("氏名" + 変数B); ・ ・ ・ }catch(Exception e){ // ログに出力 }

  • Java
  • 回答数1
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

System.setProperty("line.separator", "\r\n"); とすればbw.println()での出力改行コードを強制的にCRLFにできると思います。 ただし、この方法は特定のbwオブジェクトだけではなくline.separatorプロパティを参照する全てのコードが影響を受けるので、副作用に注意が必要です。

n_hunter
質問者

お礼

salsberry様 回答ありがとうございます。 記述して頂いたコードで変更することができました。 ただ、影響範囲が見えないので一行づつ変更することも再検討します。

関連するQ&A

  • 「得た値をCSV出力するJAVAプログラムを書きたい」

    「得た値をCSV出力するJAVAプログラムを書きたい」 固定したある点とクリックした点の距離は取得できました つまり、クリックするごとに2点間の距離は変わります 例えば 1回目:10cm 2回目:20cm 3回目:5cm とします 流れはクリック→10cmという値を取得→クリック→20cmという値を取得→・・・ するとCSVファイルには10,20,5という風に出力されるようにJAVAプログラムを書きたいです 色々調べたんですが、読み込みの方法がいまいちわかりません(全体的なこともですが・・・) データベースを読み込むとかはよく見かけるのですが。 また、実行したら勝手にCSVファイルが出来るのか? 下記のプログラムまでは出来ました import java.io.*; public static void main( String args[] ) { try { PrintWriter pw = new PrintWriter( new BufferedWriter( new FileWriter( "output.csv" ) ) ); pw.println( "kyori" ); System.out.println( "ファイルに書き込みました。" ); pw.close(); } catch( IOException exp ) { System.out.println( "入出力エラーです。" ); } } 何かアドバイスをお願いします。

  • 半角カナが含まれる文字列をファイル出力

    いつもお世話になっております。 以下のようにしてテキストファイルを出力 していますが、半角カナの出力時に文字化けして しまいます。 ------------------------------------------ FileOutputStream os = new FileOutputStream("D:\\java_src\\test1.txt"); OutputStreamWriter osw = new OutputStreamWriter(os,"Shift_JIS"); BufferedWriter writer = new BufferedWriter(osw); writer.write("テキヨウ"); writer.close(); osw.close(); os.close(); ------------------------------------------ 出力されるテキストファイルは 文字コード:Shift_JIS 改行コード:CRLF としたいのですが何かいい方法はありますでしょうか? 動作環境は WindowsXP + JDK5.0 です。 すいませんが、宜しくお願いします。

  • 改行コードについて

    HTMLフォームのテキストエリアで改行した場合の処理についてご質問します。 Windowsのローカル環境で試しています。 改行コードLFでPHPを作成しています。 ○改行コードの認識 LF(\n) Unix,Mac OS X CR(\r) Mac OS 9 CRLF(\r\n) ○テキストエリアからの入力値の処理 CRLF、CRをLFに変換しています。 $value= str_replace ("\r\n", "\n", $value); $value = str_replace ("\r", "\n", $value); このあとDBに値を格納しています。 ○出力の際の処理 DBから値を取得。 phpのprint関数で下記を出力。 <textarea >${value}</textarea> 上記処理で、ローカル、サーバともに正常に動作しています。 しかし改行コードがLF(\n)なのでCRLF(\r\n)のWindowsで表示したときには問題が起きそうな気がします(実際には正常に動作)。 なにかしっくりこなくて質問させていただきました。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • csvダウンロードで改行コードを指定する事は可能?

    画面から「csvダウンロード」というボタンを押すと、 javaが動いてcsvファイルのダウンロードができるのですが 改行コードがLFになってしまいます。 改行コードCR+LFにしたいのですが・・・。 恐らくサーバがUNIXだからだと思うのですが javaでcsvファイル作製時に改行コードを 変更もしくは指定する事は可能でしょうか? どなたかご教授ください。 よろしくお願いします。

  • CSV出力で改行がうまくできない。

    VBAでテキストファイルにCSV出力をおこなっています。 方法は、 Print #FreeFile, FreeFileOutput; でおこなっています。FreeFileOutputは変数でカンマで区切られた複数の値が はいっています。最後はカンマはありません。つまり、 "a,b,c,d" といった値がFreeFileOutputにはいっています。 これをループでまわして、複数行を出力したいとおもっています。 無事に出力はできるのですが、テキストファイルを見ると各行の終わりで改行 されていません。print関数を使い";"をつけると自動で改行が入力される みたいですがされません。どうしてでしょうか?

  • CSVファイルの改行コード削除について

    初めまして。お世話になります。 現在Linux環境を使用しており、PHPのアップロードからcsvファイルをアップする機能を設けています。アップロードしたcsvファイルを元にシェルスクリプトでINSERT文を作成している機能になります。 csvファイル自体はローカルのエクセルから作成しています。 例としては、 A1,B1 A2,B2 となっています。 シェルスクリプトでは、アップされたcsvファイルのA1,B1の情報を読み取り変数をセットしていくという単純なものになっています。 具体的にシェルスクリプト内で行っている内容としては、 while read lineを用いて一行ずつ読み、awkを用いてカンマ区切りを指定してprint $1とprint $2で分けたものを変数にセットしています。 具体的には、 echo INSERT (略) VALUES \(\'$変数A(print $1)\',\'$変数B(print $2)'\)\; >> $TEMP という具合に変数をセットしています。 そこで現在問題となっているのが、変数B(print $2)にcsvファイルの改行コードが含まれている為、作成されるINSERT文が途中で改行されて出力されてしまっています。 この変数Bに含まれている改行コードを削除したいのですが、何か良い案はないでしょうか。 シェルスクリプト内の処理でなんとか解決策を模索しております。 何卒ご教授いただければ幸いです。 誠に申し訳ありませんが宜しくお願い致します。

  • 超初心者です。CSV出力時における改行について以下質問をまとめました。

    超初心者です。CSV出力時における改行について以下質問をまとめました。 現状:HPにて受けた注文を毎日CSVにて出力しています。環境はウィンドウズVISTAです。 問題:まれに(2か月に1回程度)商品名フィールドのカンマ前で改行されてしまいます。 例:    A       B        C          D 1住所      TEL      商品名      価格 2東京      03****    花火       ¥200 3東京      03****    うちあげ     ¥200 4東京      03****    ねずみ              ¥200 4のレコードのように改行されて抽出されます。 本来はこうなってほしいのですが・・・ 4東京      03****    ねずみ      ¥200 システム系のHPには改行コードを使用する場合があり、画面上に設定通りに表示されないことがあることは調べて理解できました。 しかし、私のHPでは改行コードの設定は行っておらず、CSV出力ページにて注文データを出力する際、改行コードはいっさいプログラム上に盛り組んでいません。 今回の問題はシステムの設定によって改行されたものではないと思い、現在は”改行コード”に関して調べを進めています。何かヒントになるものがあれば是非、ご教授下さい。

  • BufferedWriter(OutPutStream).write(String)で追記がしたい

    環境 windowsXP+tomcat4.0.1 Servlet内でExceptionをcatchし、ファイルに書き出したいのですが、追記が出来ません。上書きされてしまって困っています。 コード: FileOutputStream fos = new FileOutputStream(String); OutputStreamWriter osw = new OutputStreamWriter(fos,"M932"); BufferedWriter bw = new BufferdWriter(osw); bw.write(String); 最後のwrite()を追記型で起動したいのですが、参考書にBufferedWriterクラスに関することがほとんど載っていないため、どうしたらいいのやら。 ご存知の方がいましたら、ご回答お願いいたします。

    • ベストアンサー
    • Java
  • ファイル出力時の

    以下のソースでファイル出力するのですが、 BufferedReader br = new BufferedReader(new FileReader(new File(args[0]))); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(args[1]))); //一行読み込みを行った文字列を格納 String line; //一行読み込み while((line = br.readLine()) != null){ //一行書き込み pw.write(line); System.out.println(line); } コンソールへの出力は正常に出力されるのですが、 ファイルへの出力は改行されずに一行で出力されてしまいます。 どうすればファイル出力も正常になるか教えてください。

  • 改行コード入力方法

    いつもご参考にさせて頂いております。 いろいろ調べても解らずご質問させて頂きます。 宜しくお願い致します。 Accessでデータをcsv形式に作るのですが、CRLF改行と最後に終了コードを入れたいのですが、どうすればいいのでしょうか?

専門家に質問してみよう