第 12 回 第 10 章ファイルの入出力処理 24 4 入出力ストリームクラス 245
ファイルの書き出し (1) ファイルのオープン処理 FileWriter fw=new FileWriter(args[0]); 文字列 args[0] で指定された名前のファイルを作成する.FileWriter というストリームクラスのオブジェクトによりファイルがオープンされる. このオブジェクトは変数 fw に格納される. (2) データの書き出し処理 fw.write( Data +i+ n ); FileWriter クラスの write() メソッドを使用して, オープンしたファイルに ( ) 内の書式でデータを書き込む. (3) ファイルのクローズ処理 fw.close(); FileWriter クラスの close() メソッドを使用してファイルを閉じる. 246 fw1.java 例題 1 ファイルの出力処理 // 例題 1 FileWriter によるファイル出力ファイル名は arg[0] で指定 // 注意 1 public class fw1{ // 注意 2 try{ FileWriter fw=new FileWriter(args[0]); // 注意 3 // 出力ストリームを作成.arg[0] はファイル名. for(int i=0;i<12;i++){ // 文字列をファイルに書き込む. fw.write("data "+i+" n"); // 注意 4 fw.close(); // 出力ストリームを閉じる. catch(ioexception e){ // 注意 5 System.out.println(" ファイルエラー."); // 注意 6 catch(exception e){ // 注意 7 System.out.println(" ファイル指定がありません."); // 注意 8 ファイル入出力を行うためには, が必要. 247
javac fw1.java java fw1 ファイル指定がありません. java fw1 file1.txt file1.txt Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 Data 8 Data 9 Data 10 Data 11 例題 1 ファイルの出力処理 文字列 (args[0]) が入力されていないので, エラーメッセージを表示して終了 248 ファイルの読み込み (1) ファイルのオープン処理 FileReader fr=new FileReader(args[0]); 文字列 args[0] で指定された名前のファイルを開く.FileReader というストリームクラスのオブジェクトによりファイルがオープンされる. このオブジェクトは変数 fr に格納される. (2) データの読み込み処理 while((c=fr.read())!=-1) while 文により繰り返し FileReader クラスの read() メソッドを使用して, オープンしたファイルからデータを読み出し,int 型変数 c に格納している. 読み出した結果が -1 ( ファイルの終わり : EOF) だった場合は while ループを終了する. (3) ファイルのクローズ処理 fr.close(); FileReader クラスの close() メソッドを使用してファイルを閉じる. 249
fr1.java 例題 2 ファイルの入力処理 // 例題 2 ファイル入力ファイル名は args[0] で指定 public class fr1{ try{ // 入力ストリームを作成. ファイル名は arg[0] FileReader fr=new FileReader(args[0]); // 読み込みループ. int c; while((c=fr.read())!=-1){ System.out.print((char)c); ファイル入出力を行うためには, が必要. // 入力ストリームを閉じる. fr.close(); catch(ioexception e){ System.out.println(" ファイルがありません."); catch(exception e){ System.out.println(" ファイル指定がありません."); 読み込んだデータを文字型 (char) にキャストして表示 250 javac fr1.java java fr1 ファイル指定がありません. java fr1 file1.txt Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 Data 8 Data 9 Data 10 Data 11 例題 2 ファイルの入力処理 変数 c には改行コード n も読み込まれるため,System.out.print でも改行される. 251
frw1.java 例題 3 ファイルの入出力処理 // 例題 3 ファイル入力ファイル名は args[0] で指定 // ファイル出力ファイル名は args[1] で指定 // 入力ファイルを出力ファイルにコピーする // 入力ファイルがなければエラー, 出力ファイルの存在はチェックなし public class frw1{ if(args.length!=2){ System.out.println(" 使用法 : java frw1 入力ファイル名出力ファイル名 "); System.out.println(" 例 : java frw1 test1.txt test2.txt"); System.exit(0); try{ // 入力ストリームを作成,args[0] は入力ファイル名. FileReader fr=new FileReader(args[0]); // 出力ストリームを作成,args[1] は出力ファイル名. FileWriter fw=new FileWriter(args[1]); // 読み込みループ int c; while((c=fr.read())!=-1){ fw.write(c); // 入力 出力ストリームを閉じる. fr.close(); fw.close(); catch(ioexception e){ System.out.println(" ファイルエラー."); catch(exception e){ System.out.println(" ファイル指定がありません."); 名前 args[0] のファイルからデータを読み込み, 名前 args[1] のファイルにデータを書き込む ( ファイルのコピーに対応 ) 252 javac frw1.java java frw1 使用法 : java frw1 入力ファイル名出力ファイル名例 : java frw1 test1.txt test2.txt java frw1 file1.txt file2.txt 例題 3 ファイルの入出力処理 file2.txt Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 Data 8 Data 9 Data 10 Data 11 file1.txt の内容をそのまま書き込んだだけなので,file2.txt は file1.txt と全く同じ内容となっている. 253
fd1.java 例題 4 ファイルの削除処理 // 例題 4 ファイルの削除 // ファイルの指定は args[0] public class fd1{ // パラメータの数をチェック if(args.length!=1){ System.out.println(" 使用法 : java fd1 削除ファイル名 "); System.out.println(" 例 : java fd1 file1"); System.exit(0); String ffname=args[0]; File file=new File(ffname); if(file.delete()){ System.out.println(ffname+" は削除しました."); else{ System.out.println(ffname+" は削除できませんでした."); ファイルを扱うためのクラス File のオブジェクト file を生成 ( ファイル名は ffname で指定 ) File クラスのメソッド delete() を用いてファイルを削除 254 javac fd1.java java fd1 test1 test1 は削除できませんでした. java fd1 file1 file1 は削除しました. 例題 4 ファイルの削除処理 255
fn1.java 例題 5 ファイル名の変更処理 // 例題 5 ファイル名の変更 ( ファイルの存在はチェックしていない ) // ファイル名の指定は args[0],args[1] public class fn1{ if(args.length!=2){ System.out.println(" 使用法 : java fn1 現在のファイル名新しいファイル名 "); System.out.println(" 例 : java fn1 oldfile newfile"); System.exit(0); String oldffname=args[0]; String newffname=args[1]; File oldf1=new File(oldffname); File newf2=new File(newffname); if(oldf1.renameto(newf2)){ System.out.println(oldffname+" を "+newffname+" に変更しました."); else{ System.out.println(oldffname+" を "+newffname+" に変更できませんでした."); ファイルを扱うためのクラス File のオブジェクト oldf1, newf2 を生成 ( ファイル名は oldffname, newffname で指定 ) File クラスのメソッド renameto() を用いてファイルを削除使用法 ) 元のファイルに対応するオブジェクト.renameTo( 新しいファイルに対応するオブジェクト ) 256 javac fn1.java java fn1 使用法 : java fn1 現在のファイル名新しいファイル名例 : java fn1 oldfile newfile java fn1 file1 file2 file1 を file2 に変更しました. 例題 5 ファイル名の変更処理 257