Going my way

いいなと思ったことをメモしていきます。

Javaでファイル操作まとめ(FileInputStream編)


Advertisements


JavaではFileクラスを使ってローカルシステムにあるファイルをオブジェクトとして表現できる。
では、そのファイルを読み書きするにはどうしたらいいだろうか。

そこで使うのは、「ストリーム」である。

ストリームとは、データを読み書きできる性質のみを取り出した機能のこと。

Javaではファイルの読み書きをストリームに抽象化して扱う。

"あえて"データを先頭から順に読み出すことと、順に書き込むこと"だけ"しかできないようにしている。

なぜか。

それは、機能を「ストリーム」という抽象的な概念で扱うことで、
対象がファイルだろうとネットワークを経由したデータであろうと、メモリに対する書き込みだろうと、
全てストリームで扱えるからである。

ストリームでファイルを読み書きするのは次の3つの手順で実行される。
1.ストリームを開く
2.データが存在する限り読み取りor書き込みを継続する
3.ストリームを閉じる

package forBlog;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileReadAndWrite {
	public static void main(String[] args){
		File inputFile = null;
		File outputFile = null;
		FileInputStream in = null;
		FileOutputStream out = null;
		
		try{
			inputFile = new File("C:\\temp\\Javaでツイートまとめ.txt");
			outputFile = new File("C:\\temp\\Javaでツイートまとめのコピー.txt");
			in = new FileInputStream(inputFile);
			out = new FileOutputStream(outputFile);
			int c;
			
			//ファイル末尾まで読み込み。最後は-1を返す
			while((c = in.read()) != -1){
				//inputファイルの内容を書き出す。
				out.write(c);
			}
			
		}catch(FileNotFoundException e){
			System.out.println("File not found!");
		}catch(IOException e){
			System.out.println("IO Exception!");
		}finally{
			try{
				if(in != null){
					in.close();
				}
				if(out != null){
					out.close();
				}
			} catch(IOException e){
				System.out.println("Close fail");
				e.printStackTrace();
			}
		}
	}
}

この例を実行すると、
Javaでツイートまとめ.txt
ファイルと全く同じ内容の
Javaでツイートまとめのコピーテキスト.txt
が作成される。