ファイル読み書きにはエンコーディングを(絶対に)指定する

具体的には、java.ioパッケージのFileReader・FileWriterクラスは使わず、InputStreamReader・OutputStreamWriterを使うようにする。

理由は、そうしないとcharsetの指定ができないから。指定をしないとデフォルトエンコーディングが使われる。それは動作環境によって異なる。

読み書きは、デフォルトでいいと分かっている場合以外は絶対にエンコーディングを指定する。

FileInputStream fis = null;
BufferedReader br = null;
try {
	fis = new FileInputStream(file);
//	br = new BufferedReader(new FileReader(file)); ← こうしない!
	br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
(略)
FileOutputStream fos = null;
PrintWriter pw = null;
try {
	fos = new FileOutputStream(file);
//	pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); ← こうしない!
	pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(fos, "UTF-8")));
(略)