• ベストアンサー

javaでemlファイルからtxtファイルへの変換の仕方

複数のemlファイルからtxtファイルへの一括変換の仕方がわかりません。 フリーソフトを使ってやったらtxtファイルになったとき文字化けしてしまい使えませんでした。 一つずつやるならemlファイルを名前をつけて保存で保存形式をtxtにすれば出来るんですが・・ それでjavaを使ってemlファイルからtxtファイルに変換するプログラムを作りたいんですが、本を読んでも見つかりませんでした。 renameToを使ってemlをtxtに変えても文字化けしてしまいました。 どのようなコマンドを使えば出来ますか??

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

  • ベストアンサー
  • J_H
  • ベストアンサー率57% (11/19)
回答No.2

メール文章をテキストファイルに保存したいのだと判断して。 メールの文字コードはiso-2022-jp (jis)、Windowsで通常使われるのがシフトJIS(sjis)なので変換が必要です。 やってることは、*.emlをJISで読み込み、*.txtにSJISで書き込んでるだけです。 ほかに、メールヘッダを書き込まないようにしています。 import java.io.*; class Eml2Txt{ public static void main(String[]args) throws IOException{ if (args.length < 2){ System.out.println("Usage:"); System.out.println("java [program-name] param1 param2"); System.out.println("param1: input file name (*.eml)"); System.out.println("param2: output file name (*.txt)"); return; } InputStreamReader reader = new InputStreamReader (new FileInputStream (args[0]), "jis"); BufferedReader breader = new BufferedReader (reader); OutputStreamWriter writer = new OutputStreamWriter (new FileOutputStream(args[1]), "sjis"); BufferedWriter bwriter = new BufferedWriter(writer); int c; StringBuffer sb = new StringBuffer(); while ((c = breader.read()) != -1){ sb.append((char)c); } String mail = sb.toString(); String crlf2 = "\r\n\r\n"; int pos = mail.indexOf(crlf2) + crlf2.length(); bwriter.write (mail, pos, mail.length() - pos); bwriter.close(); breader.close(); } }

inokidumu
質問者

お礼

うまく変換できました!プログラムまで丁寧に書いていただいてありがとうございます!

その他の回答 (3)

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.4

えーとそれから、Linux/Thunderbird上では、 String crlf2 = "\r\n\r\n"; は String crlf2 = "\n\n"; にしないとだめでした。

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.3

細かいことですが、Windows上なら、WriterのほうのSJISの指定は要らないはずです。Javaが勝手にSJISで出力してくれるはず…。それとも、今のWindowsはデフォルト文字コードがUTF-8か??? いずれにしても、Windowsデフォルトでよいのなら、JavaのStringやcharの出力に際して文字コードの明示的な指定は要りません。

inokidumu
質問者

お礼

回答ありがとうございます。 なるほど、参考になります。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

emlファイルが何者なのか知りませんが、文字コードを指定して読み書きしないと、 文字コードが狂って、文字化けになるのは、どんな文書でも同じです。 Javaのstream系クラスでも文字列の読み書き用のは、引数で文字コードを指定するようになってるはず。

inokidumu
質問者

お礼

回答ありがとうございます。 参考にします。