第12回
第10章
ファイルの入出力処理
24 4入出力ストリームクラス
246
ファイルの書き出し
(1) ファイルのオープン処理
FileWriter fw=new FileWriter(args[0]);
文字列args[0]で指定された名前のファイルを作成する.FileWriterというストリームクラスの
オブジェクトによりファイルがオープンされる.このオブジェクトは変数fwに格納される.
(2) データの書き出し処理
fw.write(”Data”+i+”¥n”);
FileWriterクラスのwrite()メソッドを使用して,オープンしたファイルに( )内の書式でデータを
書き込む.
(3) ファイルのクローズ処理
fw.close();
FileWriterクラスのclose()メソッドを使用してファイルを閉じる.
247例題1 ファイルの出力処理
//例題1 FileWriterによるファイル出力 ファイル名はarg[0]で指定 import java.io.*; // 注意① public class fw1{public static void main(String[] args){ // 注意② try{
FileWriter fw=new FileWriter(args[0]); // 注意③ // 出力ストリームを作成.arg[0]はファイル名. for(int i=0;i<12;i++){ // 文字列をファイルに書き込む. fw.write("Data "+i+"¥n"); // 注意④ } fw.close(); // 出力ストリームを閉じる. } catch(IOException e){ // 注意⑤ System.out.println("ファイルエラー."); // 注意⑥ } catch(Exception e){ // 注意⑦ System.out.println("ファイル指定がありません."); // 注意⑧ } } }
fw1.java
ファイル入出力を行うためには,
import java.io.*;
が必要.
248
例題1 ファイルの出力処理
K:¥java¥12th>javac fw1.java K:¥java¥12th>java fw1 ファイル指定がありません. K:¥java¥12th>java fw1 file1.txt K:¥java¥12th>実行結果
Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 Data 8 Data 9 Data 10 Data 11file1.txt
文字列(args[0])が入力されていないので,
エラーメッセージを表示して終了
ファイルの読み込み
(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ループを終了する.
250
例題2 ファイルの入力処理
//例題2 ファイル入力 ファイル名はargs[0]で指定 import java.io.*;
public class fr1{
public static void main(String[] args){ 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("ファイル指定がありません."); } } }
fr1.java
ファイル入出力を行うためには,
import java.io.*;
が必要.
読み込んだデータを文字型(char)に
キャストして表示
251例題2 ファイルの入力処理
K:¥java¥12th>javac fr1.java K:¥java¥12th>java fr1 ファイル指定がありません. K:¥java¥12th>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 K:¥java¥12th>実行結果
変数cには改行コード ¥n も読み込まれるため,System.out.printでも改行される.
252
例題3 ファイルの入出力処理
//例題3 ファイル入力 ファイル名はargs[0]で指定 // ファイル出力 ファイル名はargs[1]で指定 //入力ファイルを出力ファイルにコピーする //入力ファイルがなければエラー,出力ファイルの存在はチェックなし import java.io.*; public class frw1{public static void main(String[] args){ 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("ファイル指定がありません."); } } }
frw1.java
名前args[0]のファイルからデータを
読み込み,名前args[1]のファイル
にデータを書き込む
(ファイルのコピーに対応)
例題3 ファイルの入出力処理
K:¥java¥12th>javac frw1.java K:¥java¥12th>java frw1 使用法: java frw1 入力ファイル名 出力ファイル名 例: java frw1 test1.txt test2.txtK:¥java¥12th>java frw1 file1.txt file2.txt K:¥java¥12th>
実行結果
Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 Data 8 Data 9 Data 10 Data 11file2.txt
file1.txtの内容をそのまま書き込んだだけなので,file2.txtはfile1.txtと全く同じ内容となっている.
254
例題4 ファイルの削除処理
//例題4 ファイルの削除 //ファイルの指定はargs[0] import java.io.*; public class fd1{public static void main(String[] args){ // パラメータの数をチェック
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+"は削除できませんでした."); } } }
fd1.java
・ファイルを扱うためのクラスFileのオブジェクトfileを生成(ファイル名はffnameで指定)
・Fileクラスのメソッドdelete()を用いてファイルを削除
255例題4 ファイルの削除処理
K:¥java¥12th>javac fd1.java K:¥java¥12th>java fd1 test1 test1は削除できませんでした. K:¥java¥12th>java fd1 file1 file1は削除しました. K:¥java¥12th>実行結果
256
例題5 ファイル名の変更処理
//例題5 ファイル名の変更(ファイルの存在はチェックしていない) //ファイル名の指定はargs[0],args[1] import java.io.*; public class fn1{public static void main(String[] args){ 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+"に変更できませんでした."); } } }
fn1.java
・ファイルを扱うためのクラスFileのオブジェクトoldf1, newf2を生成(ファイル名はoldffname, newffnameで指定)
・FileクラスのメソッドrenameTo()を用いてファイルを削除
使用法) 元のファイルに対応するオブジェクト.renameTo(新しいファイルに対応するオブジェクト)
例題5 ファイル名の変更処理
K:¥java¥12th>javac fn1.java K:¥java¥12th>java fn1 使用法: java fn1 現在のファイル名 新しいファイル名 例: java fn1 oldfile newfileK:¥java¥12th>java fn1 file1 file2 file1をfile2に変更しました.
K:¥java¥12th>