「java 文字コード 変換」でグルると、 「new String("あ".getBytes("UTF-8"), "SJIS")」の方法を見かけますが、 これは誤りで、正しくは以下のように書くはず。
その他、SJISと MS932 の文字コード(文字セット)の違いを理解できていない人もよく見かけます。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintStream; import java.io.UnsupportedEncodingException; public class TestConvEncode2 { public static void main(String[] args) { File fileIn = new File(args[0]); String newFilePath = fileIn.getAbsoluteFile().getParent() + "/NEW_FILE.TXT"; File fileOut = new File(newFilePath); try { // javaで主に使用する文字コードは、UTF-8, SJIS, MS932 FileInputStream input = new FileInputStream(fileIn); InputStreamReader streamIn = new InputStreamReader(input,"UTF-8"); BufferedReader bufferR = new BufferedReader(streamIn); FileOutputStream output = new FileOutputStream(fileOut); OutputStreamWriter streamOut = new OutputStreamWriter(output,"MS932"); BufferedWriter bufferOut = new BufferedWriter(streamOut); String str; while((str = bufferR.readLine()) != null){ try { // fileへ指定した文字コードで出力 bufferOut.write(str); // 標準出力へ指定した文字コードで出力 PrintStream out_ms932 = new PrintStream(System.out, true, "MS932"); out_ms932.println(str); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } bufferR.close(); bufferOut.close(); } catch (IOException e) { e.printStackTrace(); } } }
↑こう書くと、↓こう実行できます
$ javac TestConvEncode2.java $ java TestConvEncode2 foo.txt