JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > ファイル入出力編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  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」という名前のファイルができていると思うので見てみましょう。
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