2008年8月1日金曜日

ファイルの読み書きと文字のエンコード

動作環境:
JDK5.0
システム文字コード:Shift-JIS
ファイル文字コード:EUC-JP

1.Javaの文字データ処理流れ:
Javadでは、文字データをUnicodeで管理します。
◆読み込み:
Unicode以外の文字モードのデータを読み込む場合は、Unicodeへエンコードして読み込みます。
◆書き込み:
書き込み先の文字コードはUnicode以外の場合、Unicodeで管理されている文字データを書き込み先
の文字コードへ、エンコードして書き込みます。
書き込み先の文字コードを指定してない場合、Javaを実行しているシステムのデフォルトの
エンコード方式が使用されます。(今回はShift-JISです)
◆システムのエンコードの確認:
関数System.getProperty("file.encoding")を使って、システムのエンコードの確認ができます。

2.ファイル操作Javaクラスの選択:
◆FileReader、FileWriter:
この二つのクラスを使って、文字データを読み書く場合は、システムのデフォルトの
エンコードが使用されます。
◆FileInputStream、FileOutputStream:
エンコードを指定して、ファイルの入出力を行いたい場合、この二つのクラスを使います。

3.エンコード指定の読み込みオブジェクト、書き込みオブジェクトの作成:
◆読み込みオブジェクト:
読み込みの場合、ファイルのエンコードにかかわらず、JavaがUnicodeでファイルの文字データを
エンコードして処理しますから、特にエンコードを指定する必要がないでしょう。

※下記はサンプルソース:
// Readerオブジェクトの作成
FileInputStream reader=null;
try {
reader = new FileInputStream(filePath);
} catch (FileNotFoundException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
return null;
}

InputStreamReader streamReader=null;
try {
streamReader = new InputStreamReader(reader , "JISAutoDetect");
} catch (UnsupportedEncodingException e2) {
// TODO 自動生成された catch ブロック
e2.printStackTrace();
return null;
}
BufferedReader objBufferedReader = new BufferedReader(streamReader);
◆書き込みオブジェクト:
今回書き込み先のエンコード(EUC-JP)は、システムのデフォルトのエンコード(Shift-JIS)と
違いますから、エンコードの指定が必要になります。

※下記はサンプルソース:
// Writerオブジェクトの作成
FileOutputStream writer=null;
try {
writer = new FileOutputStream(filePath);
} catch (FileNotFoundException e3) {
// TODO 自動生成された catch ブロック
e3.printStackTrace();
return null;
}

OutputStreamWriter streamWriter=null;
try {
streamWriter = new OutputStreamWriter(writer , "EUC-JP");
} catch (UnsupportedEncodingException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
return null;
}
BufferedWriter objWriter = new BufferedWriter(streamWriter);

==終わり==

0 件のコメント: