応用プログラミング 2004/11/23 データの入出力 データの入出力データをキーボードからコンピュータに入力することや CRT に表示すること, さらにハードディスク (HDD) や MO などに保存されているファイルからデータをコンピュータに読み込むことや ( 逆に ) データをこれらの装置に

Similar documents
JavaプログラミングⅠ

例外処理とファイル入出力

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - prog13.ppt

Microsoft PowerPoint - prog13.ppt

PowerPoint Presentation

オブジェクト指向プログラミング・同演習 5月21日演習課題

GEC-Java

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

Prog2_10th

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

Prog1_11th

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

GEC-Java

ファイル入出力Ⅱ

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

ファイル入出力Ⅰ

PowerPoint プレゼンテーション

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

PowerPoint Presentation

JavaプログラミングⅠ


プログラミングA

デジタル表現論・第6回

Prog1_15th

Microsoft Word - java a.doc

Microsoft PowerPoint ppt

ファイル操作-バイナリファイル

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Prog1_10th

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 3 回コレクションと例外処理 テクノロジックアート 瀬嘉秀

r1.dvi

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

データ構造とアルゴリズム論

Java における入出力と XML 2011 年 5 月 15 日 海谷治彦 1

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

1 Java Java GUI , 2 2 jlabel1 jlabel2 jlabel3 jtextfield1 jtextfield2 jtextfield3 jbutton1 jtextfield1 jtextfield2 jtextfield3

2

ファイル入出力

JAVA入門

デジタル表現論・第4回

JavaプログラミングⅠ

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Microsoft PowerPoint - prog03.ppt

データ構造とアルゴリズム論

text_11.dvi

Java講座

情報処理演習 B8クラス

Java言語 第1回

ファイル入出力

Taro-ファイル処理(公開版).jtd

Prog1_6th

スライド 1

PowerPoint プレゼンテーション

Programming-C-9.key

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

ファイル操作

プログラミング基礎I(再)

演算増幅器

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

PowerPoint プレゼンテーション

Prog1_2nd

2006年10月5日(木)実施

データ構造とアルゴリズム論

プログラミング入門1

基本情報STEP UP演習Java対策

Microsoft Word - CompA-Ex doc

ガイダンス

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

Prog2_9th

Javaプログラムの実行手順

そして 取得した OutputStream インスタンスを使い 文字コードは UTF-8 として PrintWriter インスタンスを生成して あとは PrintWriter.append() で書き込みたい文字 列を渡して close() で保存する というだけです ファイルの読込み方法 それで

プログラムの基本構成

データ構造とアルゴリズム論

File IO

PowerPoint Presentation

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

Microsoft PowerPoint - chap10_OOP.ppt

K227 Java 2

新・明解Java入門

リファレンス,配列 例外処理

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

PowerPoint プレゼンテーション

Prog1_12th

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

26 editor.putint(pref_count_key, executecount); 27 // 変更した Preference を確定させる 28 editor.commit(); 29 } (c) 実行の様子実装して実行した様子を図 1 と図 2 に示す. 一度実行するごとに, カウン

メソッドのまとめ

JavaプログラミングⅠ

Microsoft PowerPoint - prog04.ppt

マークアップ言語

public class Kadai _02 { public static void main(string[] args) { MyFrame frame = new MyFrame("Kadai _02"); (2) フレームのクラス名は MyFrame とし 以下

(Microsoft PowerPoint - \223\306\217KJava\221\346\202R\224\305.ppt)

ポインタ変数

※ ポイント ※

Microsoft PowerPoint - prog04.ppt

2

文字列操作と正規表現

Transcription:

データの入出力 データの入出力データをキーボードからコンピュータに入力することや CRT に表示すること, さらにハードディスク (HDD) や MO などに保存されているファイルからデータをコンピュータに読み込むことや ( 逆に ) データをこれらの装置に保存すること データ入出力用クラス 外部 ( キーボード,CRT, ファイル (HDD や MO など )) からのデータの読み込み, 書き出しのためのクラスが存在する java.io パッケージ データを入出力するための 出入口 を ストリーム と言う. ( つまり プログラムがデータを入出力するための機能要素が該当する ) Java ではストリームクラスが提供され, このクラスによりデータのやり取りを行なう データを入出力する手順 1 ストリーム ( すなわち, ファイル ) をオープンする ( 通常 1 回 ) 2 データを読み込む, あるいは, 書き出す 3 ストリームをクローズする ( 通常 1 回 ) (1) 文字単位のデータの入出力 文字ストリームクラス (16ビットの文字データ) (2) バイト単位のデータの入出力 バイトストリームクラス ( イメージやバイナリデータ ) Reader BufferedReader InputStreamReader 読み込み用 FileReader Object BufferedWriter Writer OutputStreamWriter FileWriter PrintWriter 書き出し用 入出力に関するクラスの構成図 基本となるクラス (1) Reader クラス ( 読み込み ),Write クラス ( 書き出し ) (2)InputStreamReader クラス ( 読み込み ),OutputStreamWriter( 書き出し ) これらのサブクラスとして多くの入出力ストリームが定義されている ( 教科書 p190 図 14.1) サブクラスは次の 2 種類に分けられる データシンクストリームデータプロセスストリーム : メモリ, ファイルといったデータシンクからの入出力を行う : バッファリングやデータ変換などのデータ処理を伴う入出力 -1-

ストリームクラスの仕組みデータ入出力を行うための処理 1 io パッケージのストリームクラスのオブジェクトを作成 2 そのオブジェクトに対して読み書きメソッドを実行データの入出力先により, ストリームクラスが異なる点に注意 ストリームクラスのコンストラクタの引数にファイル, 配列 文字列 ストリームオブジェクトのいずれかを指定 入出力のプログラム作成例ファイルからデータの入力 ファイルから文字データを読み込む FileReader クラスの利用 ( 通常 デフォルトの大きさのバッファを使って文字データをファイルから読み込む ) ファイルから Fil ereader オブジェクトを経由して ( ストリームとして ) データを読み込む処理 1 Fil ereader オブジェクトの作成 ( ファイルの環境設定のためのオブジェクトの作成 ) ( 利用例 ) FileReader fil ein=newfil ereader( ファイル名 ); あるいは Fil e infil e=newfil e( ファイル名 ); Fil ereader filein=newfil ereader(infil e); 2 データの読み込み ( 一文字ごとの読み込み ) Fil ereader オブジェクトの read メソッドを実行 ( 利用例 ) char c; c=fil ein.read(); (c には読み込んだ文字が入る ) ファイルへデータを出力ファイルへ文字データを書き出す Fil ewriter クラスの利用 ファイルへ Fil ewriter オブジェクトを経由して ( ストリームとして ) データを書き出す処理 1 Fil ewriter オブジェクトの作成 ( 利用例 ) FileWriter fil eout=newfilewriter( ファイル名 ); 2 wrtite メソッドでデータの書き出し ( 一文字ずつ出力 ) ( 利用例 ) fil eout.write c ( ); Java 内部では文字を 16 ビットの Unicode エンコーディングに従って表している 文字ストリームクラスで Reader, Writer クラスは抽象クラスである ( 継承するクラスによって各メソッドが定義される ) -2-

ストリームオブジェクトの機能拡張 ストリームオブジェクトを別のストリームクラスに接続することでストリームオブジェクトの機能を拡張する read( ) FileReader メソッド 1 文字ずつのファイルオブジェクト読み込みデータ BufferedReader オブジェクト readline() メソッド 1 行ずつの 読み込みデータ ストリームオブジェクトの機能拡張 ( 拡張の例 ) (1) ファイルから1 行ごとにデータを読む込む場合 Fil ereader クラスに 1 行ごとにデータを読むメソッドはない BuferedReader クラスの利用 (readline() の利用 ) BuferedReader クラスの入力元を FileReader オブジェクトにする BuferedReader クラスのコンストラクタの引数に Fil ereader オブジェクトを指定 FileReader ストリームを BufferedReader ストリームに接続することに相当 ファイルからデータを FileReader オブジェクト BufferedReader オブジェクト (readline( ) メソッド ) 経由して取り出す => 機能拡張に対応 ereaderfr=newfil ereader( XYZ.dat ); BuferedReaderbr=newBufferedReader(fr); Stringstr=br.readLine( ;) // 読み込み (2) ファイルへ1 行ごとにデータを書き出す場合 ewriterfw=newfil ewriter( ABC.dat ); BuferedWriterbw=newBufferedWriter(fw); br.write( 文字列 ); // 書き出し BuferedReader, BufferedWriter クラスではバッファリング ( 入出力するデータを一時ためておくこと ) により, データの読み込み, 書き出しが効率的に行われる. -3-

プログラム例ファイルの読み込み バッファ付き文字ストリームの利用 BufferedReader の利用例 ( ファイルからの読み込み ) 1: import java.io.*; 2: class BufferedReaderDemo { 3: public static void main(string args[ ]) { 4: try { 5: // FileReader オブジェクトを作成する 6: FileReader fr = new FileReader(args[0]); 7: // BufferedReader オブジェクトを作成する 8: BufferedReader br = new BufferedReader(fr); 9: // ファイルに行を読み込んで, 表示する 10: String s; 11: while((s =br.readline( ))!= null) 12: System.out.println(s); 13: 14: // FileReader オブジェクトをクローズする 15: fr.close( ); 16: } 17: catch(exception e) { 18: System.out.println("Exception: " + e); 19: } 20: } 21:} 実行例 ( コンソール画面上で ) java BufferedWriterDemo FileIn.dat ストリーム用コンポーネントの import 1 行分の文字列格納用変数 ファイルのオープンを含む 実行時のコマンドによる引数はここで設定されている BufferedReader の引数は FileReader のオブジェクト Buff eredreader のオブジェクト メソッド readline() により, 1 行ごとに読み込んで文字列クラスのオブジェクト s に格納 ( ファイルの最後には nul が入る ) 画面上に s を出力 ( 表示 ) Fil ereader オブジェクトの fr に対して close 処理 ( ファイルのクローズ ) Fil ein.dat の内容 ABCDEFG HIJKLMN 一致 実行結果 ( 画面上の表示 ) ABCDEFG HIJKLMN -4-

ファイルの書き出し バッファ付き文字ストリームの利用 BufferedWriter の利用例 ( ファイルへの書き出し ) 1: import java.io.*; 2: class BufferedWriterDemo { 3: public static void main(string args[ ]) { 4: try { 5: // FileWriter オブジェクトを作成する 6: FileWriter fw = new FileWriter(args[0]); 7: // BufferedWriter オブジェクトを作成する 8: BufferedWriter bw = new BufferedWriter(fw); 9: // ファイルに文字列を書き込む 10: for( int i= 0; i<12; i++){ 11: bw.write( Line + i + n ); 12: } 13: 14: // BufferedWriter オブジェクトをクローズする 15: bw.close( ); 16: } 17: catch(exception e) { 18: System.out.println("Exception: " + e); 19: } 20: } 21: } ストリーム用コンポーネントの import 実行時の引数に出力ファイル名を設定するので, ここには出力ファイル名が入る 引数は FileWriter オブジェクト (FileWriter からの拡張 ) BufferedWriter のオブジェクトに対して, 書き出し命令 BuferedWriter のオブジェクトに対してクローズ命令 ( ファイルのクローズ ) 実行例 ( コンソール画面上で ) java BufferedWriterDemo FileOut.dat ( 実行後 ) <FileOut.dat 内で > Line 0 Line 1 Line 11-5-

文字ストリーム [1] ファイルのコピー ( ファイルからデータを読み込み, 別ファイル名のファイルに書き出す ) Fil ereader オブジェクト,Fil ewriter オブジェクトの作成コンストラクタの引数にファイル名またはファイル名と結び付けられた Fil eオブジェクトを指定 fil ein=newfil ereader( 入力ファイル名 ); 入出力にデフォルトのエンコード, バッファサイズを利用デフォルトを変更したい場合は InputStreamReader, OutputStreamWriter を使う test.data copy.data へデータのコピー 1 copy.data の作成 (copy.data ファイルのオープン ), [2] ファイルの終わりまで 1 行ずつ読む 2 test.data からデータの読み込み, BuferedReader クラスの readline( を使う ) 3 copy.data へデータの書き出し (1 文字ごとにコピーを実行 ) プログラム例 ( 一部 ) 1:inta; 2 2:try{ 3: fil ein = newfil ereader( test.data ); 4: fil eout= newfil ewriter( copy.data ); 5: whil e((a=fil ein.read( =-1){ ))! 6: fil eout.write(a); 7: } 8: fil ein.close( ); 9: fil eout.close (; ) 10:}catch(IOExceptione){ } 3 1 ファイルの情報の格納とファイルのオープン ファイルのクローズ 例外処理 ファイル list.data から 1 行分ずつ読み込み, 配列 entry[] に格納していく. 1 ストリームの設定 2 1 行ずつファイルからデータを読み込み 3 1 行分のデータを配列に格納 4 ファイルのクローズ プログラム例 ( 一部 ) 1:Stringentry[]; 2:Buff eredreaderdin; 3:try{ 4: din=newbuff eredreader(newfil ereader( li st.data )); 5: inti=0; 6: whil e((entry[i]=din.readline( =null ))! ){ 7: i++; 8: } 2,3 9: din.close( ;) 10:}catch(IOExceptione){ } 4 ファイルのクローズ 1 行分を格納するための文字列型配列 ( 配列の一つに 1 行分の文字列が入る ) 1 ファイルのオープンとストリームの設定 (FileReader と BufferedReader による入力ファイルの設定 (BufferedReade のオブジェクトを作成 ) ) 1 行ずつファイルから読み込み, 配列 entry に (1 行分の文字列を ) 格納する ( ファイルの最後では nul が入る ) -6-

[3] キーボードからの文字データの読み込み 標準入出力に対するアクセス手段 System クラスで提供されている. 標準入力 (System.in) キーボードから入力 標準出力 (System.out) 画面 (CRT) 上への出力 キーボードからの入力をプログラムに読み込む System.in には InputStreamReader クラスの接続 (System.in はバイトストリームのオブジェクトのためデータをバイトコードから文字に変換する必要がある ) ( 例 )InputStreamReader myji =newinputstreamreader(system.in) StreamTokenizer クラス 重要 StreamTokenizer クラスは文字ストリームからデータを解析してトークンの列を生成する. トークンを利用することで, 複雑な処理を文字, 数値などどのようなタイプのデータでもまとめて扱える. トークン : 数字列または単語を表す文字列のグループ. トークンを評価することにより, 適切な処理を行える StreamTokenizer クラスのコンストラクタ StreamTokenizer( Readerr) StreamTokenizer のオブジェクトがトークン ( および, トークンの情報 ) となる 4 つの定数 :TT_EOF( ファイルの終わり状態 ),TT_EOL( 行の終わり ), TT_NUMBER( 数字の読み込み判定 ),TT_WORD( 単語の読み取り判定 ) 3 つのインスタンス変数とトークンの関係 : トークンが数字の場合 : nval に数字が入る, ttype は TT_NUMBER となるトークンが文字列の場合 : sval に文字列カ 入る, ttype は TT_WORD となる StreamTokenizer クラスを使用する手順 1 読み込み用の StreamTokenizer オブジェクトを作成する 2 文字を処理する方法を定義する 3 nexttoken( ) を呼び出して次のトークン ( 文字列 に相当 ) を取得する 4 ttype インスタンス変数を読み取り, トークンの値を読み取る 5 sval, nval または ttype インスタンス変数からトークンの型を判断する 6 トークンを処理する 7 nexttoken( ) が StreamTokenizer.TT_EOF を返すまでステップ 3~6 を繰り返す ( プログラム例は次ページ ) -7-

StreamTokenizer を利用したプログラム ( テキストファイルを読み取って その内容を解析するプログラム ) < 独習 Javap336 より > 1:importjava.io.*; 2:classStreamTokenizerDemo{ 3: publi cstaticvoidmain(stringargs[]) { 4: try{ 5: //Fil ereader オブジェクトを作成する 6: Fil ereaderfr=newfilereader(args[0]); 7: //Buff eredreader オブジェクトを作成する 8: Buff eredreaderbr=newbuferedreader(fr); 9: //StreamTokenizer オブジェクトを作成する 10: StreamTokenizerst=newStreamTokenizer(br); 11: 12: // ピリオドを通常文字として定義する 13: st.ordinarychar('.') ; 1 14: 2 15: // アポストロフを単語文字として定義する 16: st.wordchars(' '', ' '') ; 17: 18: // トークンを処理する 19: whil e(st.nexttoken() =StreamTokenizer.TT_EOF)! { 20: switch(st.ttype) { 21: casestreamtokenizer.tt_word: 3,7 22: System.out.println(st.li neno( ) +") "+ st.sval); 24: break; 25: casestreamtokenizer.tt_number: 26: System.out.println(st.li neno( ) +") "+ st.nval); 4 27: break; 28: default: 29: System.out.println(st.li neno( ) +") "+ (char)st.ttype); 30: } 31: } 32: 33: //Fil ereader オブジェクトをクローズする 34: fr.close(); 行番号を返す 35: } メソッド 36: catch (Exceptione) { 37: System.out.println("Exception: "+e); 38: } 39: } 40:} 実行時の引数としてファイル名を設定 Fil ereader オブジェクトの作成 Buff eredreader オブジェクトの作成 ( 引数は Fil ereader オブジェクト ) StreamTokenizer オブジェクトの作成 ( 引数は BuferedReader オブジェクト ) トークンの処理の設定 トークンの取得とファイルの最後かのチェック switch 文を使い, StreamTokenizer オブジェクトの ttype 変数によってトークンの種類をチェックし, 種類によって異なる処理を行っている 5 トークン内の文字および数字を表示 Fil ereader オブジェクトによってファイルを close ファイル tokens.txt には次の行が入っているとする ThePriceis$23.45. Isthattooexpensive 実行 ( コンソール画面上で以下のように処理 ) java StreamTokenizerDemo tokens.txt 結果 ( 画面表示 ) 1) The 1) Price 1) is 1) $ 1) 23.45 1). 2) Is 2) that 2) too 2) expensive -8-