プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

メール文章をテキストファイルに保存したいのだと判断して。


メールの文字コードは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();
}
}
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/01/13 21:51

えーとそれから、Linux/Thunderbird上では、


String crlf2 = "\r\n\r\n";

String crlf2 = "\n\n";
にしないとだめでした。
    • good
    • 0

細かいことですが、Windows上なら、WriterのほうのSJISの指定は要らないはずです。

Javaが勝手にSJISで出力してくれるはず…。それとも、今のWindowsはデフォルト文字コードがUTF-8か???

いずれにしても、Windowsデフォルトでよいのなら、JavaのStringやcharの出力に際して文字コードの明示的な指定は要りません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/13 21:52

emlファイルが何者なのか知りませんが、文字コードを指定して読み書きしないと、


文字コードが狂って、文字化けになるのは、どんな文書でも同じです。
Javaのstream系クラスでも文字列の読み書き用のは、引数で文字コードを指定するようになってるはず。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/13 21:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!