|
| |
2002/02/03 田中宏和 |
| Last Update
2002/11/25 |
|
 |
ファイル入出力編 |
 |
|
| Javaではファイルの入出力を簡単に行うことができます。ここではファイルに「こんにちわ 世界」と書き込み、そのファイルから書き込んだ文字を読み込んで表示したいと思います。 |
| ◆ここでの環境 |
| OS |
Windows 2000 |
| J2SE SDK |
1.4.0 |
|
|
|
| ◆Java実行環境の構築 |
| アプリケーション編を参考にしてJava実行環境を構築してください。 |
| |
| ファイルに出力 |
| ファイルにデータを出力するにはFileOutputStreamを使います。 |
FileOutputStream fos = new FileOutputStream("hello.txt"); |
|
| FileOutputStreamはバイト単位のデータをそのまま書き込みます。しかし、文字を書き込む場合はその環境の「文字エンコーディング」にしたがって適切に変換してから書き込まなければなりません。そこで登場するのがOutputStreamWriterです。 |
FileOutputStream fos = new FileOutputStream("hello.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos , "MS932"); |
|
| ここではコンストラクタの引数に「MS932」と指定していますが、省略した場合はその環境のデフォルトの文字エンコーディングが使用されます。すなわち、省略しても適切に変換されて書き込まれます。(Windowsの場合、デフォルトの文字エンコーディングは「MS932」) |
| これで文字が書き込めるようになりました。しかし、1文字書き込むだけならこれだけでいいですが、たくさんの文字を書き込む場合、1文字単位で変換していたのでは非効率です。そこで登場するのがBufferedWriterです。文字列をバッファリングすることによって効率的に書き込むことができるようになります。 |
FileOutputStream fos = new FileOutputStream("hello.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos , "MS932"); BufferedWriter bw = new BufferedWriter(osw); |
|
| 上記の3行は以下のように書くことができます。 |
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( new FileOutputStream("hello.txt"),"MS932")); |
|
| ■Javaソースコード |
| HelloWorldFileWriter.java(ここからダウンロード) |
import java.io.*;
public class HelloWorldFileWriter {
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("hello.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos , "MS932");
BufferedWriter bw = new BufferedWriter(osw);
String msg = "こんにちは 世界";
bw.write(msg);
bw.close();
osw.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} |
|
|
| ■コンパイルと実行 |
| コマンドプロンプト |
| C:\作業フォルダ\JavaHello>javac
HelloWorldFileWriter.java C:\作業フォルダ\JavaHello>java
HelloWorldFileWriter
C:\作業フォルダ\JavaHello> |
|
| 正常に実行されました。「hello.txt」という名前のファイルができていると思うので見てみましょう。 |
| |
| おおおお!正常に書き込まれていますね! |
| |
| ファイルから入力 |
| ファイルからデータを入力する場合はFileInputStreamを使います。 |
FileInputStream fis = new FileInputStream("hello.txt"); |
|
| FileInputStreamはバイト単位のデータをそのまま読み込みます。しかし、文字を読み込む場合はその環境の「文字エンコーディング」にしたがって適切に変換して読み込まなければなりません。そこで登場するのがInputStreamReaderです。 |
FileInputStream fis = new FileInputStream("hello.txt"); InputStreamReader ir = new InputStreamReader(fis , "MS932"); |
|
| ここではコンストラクタの引数に「MS932」と指定していますが、省略した場合はその環境のデフォルトの文字エンコーディングが使用されます。すなわち、省略しても適切に変換されて読み込まれます。(Windowsの場合、デフォルトの文字エンコーディングは「MS932」) |
| これで文字が読み込めるようになりました。しかし、1文字読み込むだけならこれだけでいいですが、たくさんの文字を読み込む場合、1文字単位で変換していたのでは非効率です。そこで登場するのがBufferedReaderです。文字列をバッファリングすることによって効率的に読み込むことができるようになります。 |
FileInputStream fis = new FileInputStream("hello.txt"); InputStreamReader ir = new InputStreamReader(fis , "MS932"); BufferedReader br = new BufferedReader(ir); |
|
| 上記の3行は以下のように書くことができます。 |
BufferedReader in = new BufferedReader( new InputStreamReader( new FileInputStream("hello.txt"),"MS932")); |
|
| ■Javaソースコード |
| HelloWorldFileReader.java(ここからダウンロード) |
import java.io.*;
public class HelloWorldFileReader {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("hello.txt");
InputStreamReader ir = new InputStreamReader(fis , "MS932");
BufferedReader br = new BufferedReader(ir);
String msg = br.readLine();
// 表示
System.out.println(msg);
fis.close();
ir.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} |
|
|
| ■コンパイルと実行 |
| コマンドプロンプト |
| C:\作業フォルダ\JavaHello>javac
HelloWorldFileReader.java C:\作業フォルダ\JavaHello>java
HelloWorldFileReader
こんにちは 世界
C:\作業フォルダ\JavaHello> |
|
| おおおお!読み込んで表示されましたね! |
| |
| ファイル入出力のまとめ |
| 入出力で使用されるクラスは入出力それぞれに対応したクラスが存在します。以下が今回使用したクラスの対応表です。 |
| 簡単な説明 |
出力 |
入力 |
| バイトデータ |
FileOutputStream |
FileInputStream |
| 文字エンコーディング |
OutputStreamWriter |
InputStreamReader |
| バッファリング |
BufferedWriter |
BufferedReader |
|
| こうしてみるとわかりやすいですね! |
| ■ファイルに文字を入出力するための簡易クラス |
| ファイルに文字を入出力するための簡易クラスがあります。その環境の文字エンコーディングにしたがって変換して入出力できます。 |
| - ファイルに文字を入出力するための簡易クラス - |
| 簡単な説明 |
出力 |
入力 |
バイトデータ &
文字エンコーディング |
FileWriter |
FileReader |
|
| (使用例) |
BufferedWriter bw = new BufferedWriter(new FileWriter("hellowrold.txt")); bw.write("JavaでHello World"); bw.close(); |
|
BufferedReader br = new BufferedReader(new FileReader("hellowrold.txt")); String message = br.readLine(); br.close(); |
|
| |
| ファイルのランダムアクセス |
| ファイルの任意の位置からデータを読み込んだり、任意の位置にデータを書き込んだりするにはRandomAccessFileクラスを使用します。 |
| - ファイルの任意の位置に文字を出力する例 - |
// ランダムアクセスファイルストリームを入出力用で作成します
RandomAccessFile out = new RandomAccessFile("hello.txt","rw");
// ファイルポインタを10バイトの位置まで移動します
out.seek(10);
// 書き込みます
String message = "こんにちわ 世界";
out.write(message.getBytes());
// ランダムアクセスファイルストリームを終了します
out.close(); |
|
|
| |
■書籍
Java関連の書籍 |
|
| |
|
| |
| ツールの部屋
- Java関連の書籍 - デザインパターン - 情報交換掲示板
- HOME |