ファイル入出力に関するサンプル

ファイルの入出力に関するサンプル集です。

Home > サンプル集 > Javaサンプル集 > ファイルの入出力


ファイルの入出力

このページには、以下のサンプルを掲載しています。 下の項目をクリックをすると各サンプルにジャンプします。 ※2週間以内の新着記事はNewアイコン、更新記事はUpアイコンが表示されます。
  1. テキストファイルへの書き込み ( FileInOut01.java )  
  2. テキストファイルへの追加書き込み(FileInOut08.java)  
  3. 文字コードを指定したテキストファイルへの書き込み( FileInOut03.java )  
  4. テキストファイルの読み込み(FileInOut04.java)  
  5. 文字コードを指定してテキストファイルを読み込む(FileInOut05.java)  
  6. テキストファイルの読み書き(FileInOut06.java)  
  7. バイナリーデータをファイルに書き込む(FileInOut07.java)  
  8. バイナリーファイルを読み込む(FileInOut08.java)  
  9. バイナリーデータの読み書き(FileInOut09.java)  

1. テキストファイルへの書き込み

[ サンプルプログラムのソースコード - FileInOut01.java - ]
  1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import java.io.OutputStreamWriter;
  4. import java.io.PrintWriter;
  5. /**
  6.  * ファイルの書き込みサンプル
  7.  * テキストファイルへの書き込み
  8.  */
  9. public class FileInOut01 {
  10.   public static void main(String[] args) {
  11.     
  12.     // 書き込むファイルの名前
  13.     String outputFileName = "c:/temp/test.txt";
  14.     
  15.     // ファイルオブジェクトの生成
  16.     File outputFile = new File(outputFileName);
  17.     try {
  18.       // 出力ストリームの生成
  19.       FileOutputStream fos = new FileOutputStream(outputFile);
  20.       OutputStreamWriter osw = new OutputStreamWriter(fos);
  21.       PrintWriter pw = new PrintWriter(osw);
  22.       // ファイルへの書き込み
  23.       pw.println("Javaサンプルプログラム");
  24.       pw.println("ファイル入出力");
  25.       
  26.       // 後始末
  27.       pw.close();
  28.     // エラーがあった場合は、スタックトレースを出力
  29.     } catch(Exception e) {
  30.       e.printStackTrace();
  31.     }
  32.   }
  33. }

[ サンプルプログラムの解説 ]
サンプルでは、ファイルに文字列を書き込んでいます。
ファイルに書き込む時の処理の流れは大体下のような感じになります。
 1.出力ストリームの生成(22〜24行目)
     ↓
 2.ファイルへの書き込み(27、28行目)
     ↓
 3.出力ストリームのクローズ(31行目)



2. テキストファイルへの追加書き込み

[ サンプルプログラムのソースコード - FileInOut02.java - ]
  1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import java.io.OutputStreamWriter;
  4. import java.io.PrintWriter;
  5. /**
  6.  * ファイルの書き込みサンプル
  7.  * テキストファイルへの追加書き込み
  8.  */
  9. public class FileInOut02 {
  10.   public static void main(String[] args) {
  11.     
  12.     // 書き込むファイルの名前
  13.     String outputFileName = "c:/temp/test.txt";
  14.     
  15.     // ファイルオブジェクトの生成
  16.     File outputFile = new File(outputFileName);
  17.     try {
  18.       // 出力ストリームの生成(追記モード)
  19.       FileOutputStream fos = new FileOutputStream(outputFile,true);
  20.       OutputStreamWriter osw = new OutputStreamWriter(fos);
  21.       PrintWriter pw = new PrintWriter(osw);
  22.       // ファイルへの書き込み
  23.       pw.println("追記データ");
  24.       pw.println("FileOutputStream生成時に追記指定が出来るよ");
  25.       
  26.       // 後始末
  27.       pw.close();
  28.     // エラーがあった場合は、スタックトレースを出力
  29.     } catch(Exception e) {
  30.       e.printStackTrace();
  31.     }
  32.   }
  33. }
[ サンプルプログラムの解説 ]
テキストファイルに追記する場合は、サンプル22行目赤字部分のようにFileOutputStreamオブジェクト を生成するときに第2引数にtrueを指定します。サンプルでは、前のサンプル 「テキストファイルへの書き込み(FileInOut01.java)」で書き込みを行ったファイル (c:/temp/test.txt)の最終行からストリームに出力した文字列が追記されます。


3. テキストファイルへの書き込み

[ サンプルプログラムのソースコード - FileInOut03.java - ]
  1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import java.io.OutputStreamWriter;
  4. import java.io.PrintWriter;
  5. /**
  6.  * ファイルの書き込みサンプル
  7.  * テキストファイルへの書き込み
  8.  */
  9. public class FileInOut03 {
  10.   public static void main(String[] args) {
  11.     
  12.     // 書き込むファイルの名前
  13.     String outputFileName = "c:/temp/test.txt";
  14.     
  15.     // ファイルオブジェクトの生成
  16.     File outputFile = new File(outputFileName);
  17.     try {
  18.       // 出力ストリームの生成(文字コード指定)
  19.       FileOutputStream fos = new FileOutputStream(outputFile);
  20.       OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
  21.       PrintWriter pw = new PrintWriter(osw);
  22.       // ファイルへの書き込み
  23.       pw.println("Javaサンプルプログラム");
  24.       pw.println("ファイル入出力");
  25.       
  26.       // 後始末
  27.       pw.close();
  28.     // エラーがあった場合は、スタックトレースを出力
  29.     } catch(Exception e) {
  30.       e.printStackTrace();
  31.     }
  32.   }
  33. }
[ サンプルプログラムの解説 ]
OutputStreamWriterオブジェクト生成時の第2引数に文字コードを指定すると指定した文字コードで ストリームへの出力が行われます。


4. テキストファイルの読み込み

[ サンプルプログラムのソースコード - FileInOut04.java - ]
  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.InputStreamReader;
  5. /**
  6.  * ファイルの読み込みサンプル
  7.  * テキストファイルの読み込み
  8.  */
  9. public class FileInOut04 {
  10.   public static void main(String[] args) {
  11.     
  12.     // 読み込むファイルの名前
  13.     String inputFileName = "c:/temp/test.txt"
  14.     // ファイルオブジェクトの生成
  15.     File inputFile = new File(inputFileName);
  16.     try {
  17.       // 入力ストリームの生成
  18.       FileInputStream fis = new FileInputStream(inputFile);
  19.       InputStreamReader isr = new InputStreamReader(fis);
  20.       BufferedReader br = new BufferedReader(isr);
  21.       // テキストファイルからの読み込み
  22.       String msg;
  23.       while ( ( msg = br.readLine()) != null ) {
  24.         System.out.println(msg);
  25.       }
  26.       
  27.       // 後始末
  28.       br.close();
  29.       // エラーがあった場合は、スタックトレースを出力
  30.     } catch(Exception e) {
  31.       e.printStackTrace();
  32.     }
  33.   }
  34. }
[ サンプルプログラムの解説 ]
ファイルを読み込む場合は、入力ストリームを生成します。サンプルでは、22〜24行目で入力ストリーム を生成しています。生成した入力ストリームからBufferedReader#readLineを使って1行分の文字列を 入力します。サンプルでは、入力ストリームから入力した文字列を標準出力に表示しています。


5. 文字コードを指定してテキストファイルを読み込む

[ サンプルプログラムのソースコード - FileInOut05.java - ]
  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.InputStreamReader;
  5. /**
  6.  * ファイルの読み込みサンプル
  7.  * 文字コードを指定してテキストファイルを読み込む
  8.  */
  9. public class FileInOut05 {
  10.   public static void main(String[] args) {
  11.     
  12.     // 読み込むファイルの名前
  13.     String inputFileName = "c:/temp/test.txt"
  14.     // ファイルオブジェクトの生成
  15.     File inputFile = new File(inputFileName);
  16.     try {
  17.       // 入力ストリームの生成(文字コード指定)
  18.       FileInputStream fis = new FileInputStream(inputFile);
  19.       InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
  20.       BufferedReader br = new BufferedReader(isr);
  21.       // テキストファイルからの読み込み
  22.       String msg;
  23.       while ( ( msg = br.readLine()) != null ) {
  24.         System.out.println(msg);
  25.       }
  26.       
  27.       // 後始末
  28.       br.close();
  29.       // エラーがあった場合は、スタックトレースを出力
  30.     } catch(Exception e) {
  31.       e.printStackTrace();
  32.     }
  33.   }
  34. }
[ サンプルプログラムの解説 ]
書き込みと同じく文字コードを指定することも出来ます。 InputStreamReaderオブジェクト生成時の第2引数に文字コードを指定すると指定した文字コード で入力ストリームから読み込みます。サンプルでは、UTF-8を指定しています。

6. テキストファイルの読み書き

[ サンプルプログラムのソースコード - FileInOut06.java - ]
  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStreamWriter;
  7. import java.io.PrintWriter;
  8. /**
  9.  * ファイルの読み書きサンプル
  10.  * テキストファイルの読み書き
  11.  */
  12. public class FileInOut06 {
  13.   public static void main(String[] args) {
  14.     
  15.     // 読み込むファイルの名前
  16.     String inputFileName = "test.txt";
  17.     // 書き込むファイルの名前
  18.     String outputFileName = "test_utf8.txt";
  19.     
  20.     // ファイルオブジェクトの生成
  21.     File inputFile = new File(inputFileName);
  22.     File outputFile = new File(outputFileName);
  23.     try {
  24.       // 入力ストリームの生成
  25.       FileInputStream fis = new FileInputStream(inputFile);
  26.       InputStreamReader isr = new InputStreamReader(fis,"SJIS");
  27.       BufferedReader br = new BufferedReader(isr);
  28.       // 出力ストリームの生成
  29.       FileOutputStream fos = new FileOutputStream(outputFile);
  30.       OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
  31.       PrintWriter pw = new PrintWriter(osw);
  32.       // ファイルへの読み書き
  33.       String msg;
  34.       while ( ( msg = br.readLine()) != null ) {
  35.         pw.println(msg);
  36.       }
  37.       
  38.       // 後始末
  39.       br.close();
  40.       pw.close();
  41.      // エラーがあった場合は、スタックトレースを出力
  42.     } catch(Exception e) {
  43.       e.printStackTrace();
  44.     }
  45.   }
  46. }
[ サンプルプログラムの解説 ]
入力ストリームと出力ストリームを同時に使うことも出来ます。 サンプルでは、SJIS(シフトJIS)で書かれたテキストファイルを読み込んで UTF-8で書き込みを行っています。


7. バイナリーデータをファイルに書き込む

[ サンプルプログラムのソースコード - FileInOut07.java - ]
  1. import java.io.BufferedOutputStream;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. /**
  5.  * ファイルの書き込みサンプル
  6.  * バイナリーデータをファイルに書き込む
  7.  */
  8. public class FileInOut07 {
  9.   public static void main(String[] args) {
  10.     
  11.     // 書き込むデータ 
  12.     byte[] data = { 0x41, 0x42, 0x43, 0x0d, 0x0a };
  13.     
  14.     // 書き込むファイルの名前
  15.     String outputFileName = "c:/temp/test.dat"
  16.     
  17.     // ファイルオブジェクト生成
  18.     File outputFile = new File(outputFileName);
  19.     
  20.     try {
  21.       // 出力ストリームの生成
  22.       FileOutputStream fos = new FileOutputStream(outputFile);
  23.       BufferedOutputStream bos = new BufferedOutputStream(fos);
  24.       // 出力ストリームへの書き込み(ファイルへの書き込み)
  25.       bos.write(data);
  26.       
  27.       // 後始末
  28.       bos.flush();
  29.       bos.close();
  30.     // エラーがあった場合は、スタックトレースを出力
  31.     } catch(Exception e) {
  32.       e.printStackTrace();
  33.     }
  34.   }
  35. }
[ サンプルプログラムの解説 ]
バイナリデータをファイルに書き込むには、BufferedOutputStreamを使います。 BufferedOutputStream#writeメソッドでは、バイト配列を出力ストリームに書き出します。


8. バイナリーファイルを読み込む

[ サンプルプログラムのソースコード - FileInOut08.java - ]
  1. import java.io.BufferedInputStream;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. /**
  5.  * ファイルの読み込みサンプル
  6.  * バイナリーファイルを読み込む
  7.  */
  8. public class FileInOut08 {
  9.   public static void main(String[] args) {
  10.     
  11.     // 読み込むファイルの名前
  12.     String inputFileName = "c:/temp/test.dat"
  13.     // ファイルオブジェクト生成
  14.     File inputFile = new File(inputFileName);
  15.     try {
  16.       // 入力ストリームの生成
  17.       FileInputStream fis = new FileInputStream(inputFile);
  18.       BufferedInputStream bis = new BufferedInputStream(fis);
  19.       // 読み込み用バイト配列
  20.       byte[] buf = new byte[1024];
  21.       // 入力ストリームからの読み込み(ファイルの読み込み)
  22.       int len = bis.read(buf);
  23.       // 読み込んだデータを16進形式で表示
  24.       String hex;
  25.       for ( int i = 0; i < len; i++ ) {
  26.         hex = String.format("%1$x ", buf[i]);
  27.         hex = hex.length() == 2 ? "0" + hex : hex;
  28.         System.out.print(hex + " ");
  29.       }
  30.       System.out.println();
  31.       
  32.       // 後始末
  33.       bis.close();
  34.     // エラーがあった場合は、スタックトレースを出力
  35.     } catch(Exception e) {
  36.       e.printStackTrace();
  37.     }
  38.   }
  39. }
[ サンプルプログラムの解説 ]
BufferedInputStreamを使うとバイナリファイルの読み込みができます。 あらかじめ生成しておいたバイト配列をBufferedInputStream.readメソッドに渡して あげるとバイト配列上に読み込んだバイト列を設定してくれます。


9. バイナリーデータの読み書き

[ サンプルプログラムのソースコード - FileInOut09.java - ]
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. /**
  7.  * ファイルの書き込みサンプル
  8.  * バイナリーデータの読み書き
  9.  */
  10. public class FileInOut09 {
  11.   public static void main(String[] args) {
  12.     
  13.     // 読み込むファイルの名前
  14.     String inputFileName = "input.dat"
  15.     // 書き込むファイルの名前
  16.     String outputFileName = "output.dat"
  17.     
  18.     // ファイルオブジェクトの生成
  19.     File inputFile = new File(inputFileName);
  20.     File outputFile = new File(outputFileName);
  21.     try {
  22.       // 入力ストリームの生成
  23.       FileInputStream fis = new FileInputStream(inputFile);
  24.       BufferedInputStream bis = new BufferedInputStream(fis);
  25.       // 出力ストリームの生成
  26.       FileOutputStream fos = new FileOutputStream(outputFile);
  27.       BufferedOutputStream bos = new BufferedOutputStream(fos);
  28.       // 読み込み用バイト配列
  29.       byte[] buf = new byte[1024];
  30.       // ファイルへの読み書き
  31.       int len = 0;
  32.       while ( ( len = bis.read(buf) ) != -1 ) {
  33.         bos.write(buf, 0, len);
  34.       }
  35.       
  36.       // 後始末
  37.       bos.flush();
  38.       bos.close();
  39.       bis.close();
  40.     // エラーがあった場合は、スタックトレースを出力
  41.     } catch(Exception e) {
  42.       e.printStackTrace();
  43.     }
  44.   }
  45. }
[ サンプルプログラムの解説 ]
入力ストリームと出力ストリームを同時に生成してバイナリファイルを別のファイルにコピー することも出来ます。





最終更新日:2019/02/13

2015-03-01からの訪問者数
 16773 人