PHASE2 LOG

主にIT関連・ゲームのログ

Javaのお勉強~テキストファイルの読み書き~

      2016/03/12

ストリームや例外の知識を踏まえてファイルに読み書きしましょう。

今回は文字データの読み書きについてお勉強してみます。

 

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

 

まずはテキストファイルの読み込みについての手順です。

 

1.ファイルを開く

FileReaderというストリームクラスを利用してファイルを開きます。

FileReaderオブジェクトの生成は以下のように記述します。

 

FileReader オブジェクト名 = new FileReader("ファイル名");

 

2.データを読み込む

read()メソッドを使用してデータを読み込むことができます。

read()メソッドは読み込んだ文字をint型の整数で返却します。

 

ここで「なぜint型?String型とかじゃないの?」という疑問がわきました(;´∀`)

どうやらあとで文字型に変換する必要があるようなので後述します。

 

read()メソッドで読み込むデータがなくなると-1を返します。

つまり、ファイルの文字をすべて読み込むにはread()メソッドが-1を返すまで

read()メソッドを繰り返すというわけです。

 

3.ファイルを閉じる

ファイルを閉じる時はclose()メソッドを使用します。

 

以上が、ファイル読み込みの流れとなります。

実際の例を見てみましょう。

//ストリームのためのクラスをインポート
import java.io.*;

public class FileRead {
	public static void main(String[] args){
		try {
			//FileReaderオブジェクトの生成
			FileReader moon = new FileReader("hormone.txt");
			int c;	//read()メソッドで返ってきたint型の整数を受け取る変数
			String s = new String();
			
			//read()メソッドが-1を返すまで繰り返す
			while((c = moon.read()) != -1) {
				//int型になっているのでchar型に変換して連結
				s = s + (char)c;
			}
				//読み込んだ文字を出力
				System.out.print(s);
			//ファイルを閉じる
			moon.close();
		
		//ファイルが読み込めなかった場合の例外処理
		} catch (Exception e){
			System.out.println("ファイルが読み込めませんでした。");
		} finally {
			System.out.println("処理を終了しました。");
		}
	}
}

 

read()メソッドはint型で返却されるので「s = s + (char)c;」のように返却された値を

char型に変換しないとそのままでは文字として表示されません。

 

hormone.txtには以下の「~入れない」まで実行結果と同じように記述しています。

ちゃんと改行とかも読み込んでくれてるようでした!

ここから一歩も通さない

 

理屈も法律も通さない

 

誰の声も届かない

 

友達も恋人も入れない処理を終了しました。

 

実行結果を見るとfinallyの処理の内容は改行されないみたいですね。

printlnを書いてあげたほうが良さそうです(笑)

 

今度は書き出しについてです!

 

ファイルの書き出し

 

ファイルへ書き出すときの手順を見てみます。

 

1.ファイルを開く

テキストファイルを書き出すにはFileWriterというストリームクラスを使用します。

指定したファイルが存在しないときは新規でテキストファイルを作成し、

ファイルがすでに存在する場合は上書きします。

FileWriter オブジェクト名 = new FileWriter("ファイル名");

 

2.データを書き出す

write()メソッドを使用してデータを書き出すことができます。

write()メソッドでは引数として与えたデータが書き出されます。

 

3.ファイルを閉じる

close()メソッドでファイルを閉じます。

 

では実際に書き出しの処理を見てみます。

//ストリームのためのクラスをインポート
import java.io.*;

public class FileWrite {
	public static void main(String[] args){
		try {
			//FileWriterオブジェクトの生成
			FileWriter cd = new FileWriter("hormone.txt");
			int tbhk = 2889;
			int itkt = 1292;
			
			cd.write("ツバ吐き価格:" + tbhk + "\r\n");
			cd.write("胃痛苦痛価格:" + itkt + "\r\n");
			//計算は()で区切って先にさせる
			cd.write("合計価格:" + (tbhk + itkt) + "\r\n");
			
			//ファイルを閉じる
			cd.close();
		
		//ファイルが読み込めなかった場合の例外処理
		} catch (Exception e){
			System.out.println(e);
		}
		//finally省略
	}
}

 

さきほどのhormone.textが存在しているのでそのファイルに上書きします。

すると、テキストファイルの内容が以下の様になっていました。

 

ツバ吐き価格:2889

胃痛苦痛価格:1292

合計価格:4181

 

 

追加していくのではなく、まるごと上書きですね。

(tbhk + itkt)のように計算した結果も出力できてます。

 

ちなみに個人的に気づいたのが改行コードは「\n」だと思っていたのですが、

調べるとWindowsでは「\r\n」と書くそうです…。

OSによって改行コードの書き方は異なるみたいでそれぞれこんな感じでした。

  • Mac:\r
  • Unix:\n
  • Windows:\r\n

JavaってOSに依存しないのがメリットじゃなかったですか?新たな疑問です(笑)

とりあえず以上がテキストファイルの読み書きについてでした!

 

人気ブログランキング

 -