テキストファイルの入出力


ブラウザでダウンロード
SHIFT_JIS で入力して UTF8N(UTF8) で出力する
Java のテキストファイル入力は、3つのクラスを1セットで使用します
( デフォルトの文字エンコーディングのみならば、FileReader と BufferedReader )

FileInputStream( バイトストリーム )
   ▼
InputStreamReader( キャラクタセット処理 )
   ▼
BufferedReader ( 行単位で処理する )


※ 有効なキャラクタセットはこちら

書き込みで UTF8 を指定すると、いわゆる UTF8N になりますので、
BOM( EF BB BF ) が必要な場合は、事前に自分で FileOutputStream を使用して書き込みます
001.package action;
002. 
003.import javax.swing.*;
004.import java.awt.*;
005.import java.io.*;
006. 
007.//*****************************************************
008.// サンプルテストクラス
009.//*****************************************************
010.public class Check {
011. 
012.    //*************************************************
013.    // ●● テキストファイル処理 ●●
014.    //
015.    // 【1】FileInputStream(String name) で
016.    // ( InputStream => FileInputStream )
017.    // InputStream を作成し、
018.    //
019.    // 【2】InputStreamReader(InputStream in, String charsetName)
020.    // ( Reader => InputStreamReader )
021.    // で Reader を作成し
022.    //
023.    // 【3】BufferedReader(Reader in) に渡す
024.    //*************************************************
025.    public static void testProc(Object[] param) {
026. 
027.        System.out.println("処理開始");
028.        System.out.println(((AppWindow)param[0]).titleString);
029. 
030.        String targetFile = "..\\readme.txt";
031.        String resultFile_utf8n = "..\\readme.utf8n.txt";
032.        String resultFile_utf8 = "..\\readme.utf8.txt";
033.        String resultFile_ujis = "..\\readme.ujis.txt";
034. 
035.        try {
036. 
037.            // 生のバイトのストリーム
038.            // キャラクタセットを指定して読み込む為に、使用する
039.            // ↓【readme.txt】
040.            FileInputStream fis = new FileInputStream(targetFile);
041. 
042.            // SHIFT_JIS として読み込む為の準備
043.            // ↓【 FileInputStream】
044.            InputStreamReader isr = new InputStreamReader(fis, "SJIS");
045. 
046.            // 行単位で読み込む為の準備
047.            BufferedReader br = new BufferedReader(isr);
048. 
049.            String line_buffer;
050. 
051.            // BufferedReader は、readLine が null を返すと読み込み終了
052.            while ( null != (line_buffer = br.readLine() ) ) {
053.                // コマンドプロンプトに表示
054.                System.out.println(line_buffer);
055.            }
056. 
057.            // 各々受け持ちクラスを閉じる
058.            br.close();
059.            isr.close();
060.            fis.close();
061. 
062. 
063.            // *******************************************************
064.            // ※ "UTF8" で、UTF8N になります
065.            // UTF8N に変換の為、再度同じファイルを入力
066.            // 今度は入力は変数を使わずに書く
067.            // *******************************************************
068.            br = new BufferedReader(
069.                    new InputStreamReader(
070.                        new FileInputStream(targetFile), "SJIS"
071.                    )
072.            );
073.            // *******************************************************
074.            // UTF8N 用の書き込み用のインスタンスを同様に作成
075.            // *******************************************************
076.            BufferedWriter bw = new BufferedWriter(
077.                    new OutputStreamWriter(
078.                        new FileOutputStream(resultFile_utf8n), "UTF8"
079.                    )
080.            );
081. 
082.            while ( null != (line_buffer = br.readLine() ) ) {
083.                // CrLf にするには、その通りに書き込む
084.                bw.write( line_buffer + "\r\n" );
085.            }
086.            bw.close();
087.            br.close();
088. 
089. 
090.            // *******************************************************
091.            // BOM( EF BB BF ) 付きにするには自分で先に書き出す
092.            // *******************************************************
093.            br = new BufferedReader(
094.                    new InputStreamReader(
095.                        new FileInputStream(targetFile), "SJIS"
096.                    )
097.            );
098.            FileOutputStream fos = new FileOutputStream(resultFile_utf8);
099.            fos.write( 0xef );
100.            fos.write( 0xbb );
101.            fos.write( 0xbf );
102.            bw = new BufferedWriter(
103.                    new OutputStreamWriter(
104.                        fos, "UTF8"
105.                    )
106.            );
107. 
108.            while ( null != (line_buffer = br.readLine() ) ) {
109.                // CrLf にするには、その通りに書き込む
110.                bw.write( line_buffer + "\r\n" );
111.            }
112.            bw.close();
113.            fos.close();
114.            br.close();
115. 
116. 
117.            // *******************************************************
118.            // EUC-JP に変換の為、再度同じファイルを入力
119.            // *******************************************************
120.            br = new BufferedReader(
121.                    new InputStreamReader(
122.                        new FileInputStream(targetFile), "SJIS"
123.                    )
124.            );
125.            // *******************************************************
126.            // EUC-JP にするには "EUC_JP" でも "EUC-JP" OK
127.            // *******************************************************
128.            bw = new BufferedWriter(
129.                    new OutputStreamWriter(
130.                        new FileOutputStream(resultFile_ujis), "EUC_JP"
131.                    )
132.            );
133. 
134.            while ( null != (line_buffer = br.readLine() ) ) {
135.                bw.write( line_buffer + "\r\n" );
136.            }
137.            bw.close();
138.            br.close();
139. 
140.        }
141.        catch( Exception e  ) {
142.            System.out.println(e.getMessage());
143.        }
144. 
145.        System.out.println("処理終了");
146. 
147.        ((AppWindow)param[0]).MsgOk("処理完了");
148. 
149.    }
150. 
151.}