• 検索結果がありません。

プログラミング論

N/A
N/A
Protected

Academic year: 2022

シェア "プログラミング論"

Copied!
15
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラミング論

第 05 回

ファイル入出力の基礎

(2)

教材の追加

 Java 第 2 版 実践編 アプリケーション作りの基本 三谷 純(著),翔泳社 ・・・ただし販売終了

 今回の内容のみ抜粋したPDFをMoodleからダウンロード

 古本 or 持っている人から譲ってもらう

 第3版を買う(ただし,GUIの部分は授業内容と異なる)

 Java SE 8 / Java FX 8 概説,中村 勝則(著)

 無償公開されていたものをMoodleからダウンロード

 第06回以降の参考書

(3)

入出力

 入力: プログラムにデータを送る

プログラムがデータを読み込む

 キーボードから(これまでのScannerクラス等)

 ファイルから(今回の授業)

 ネットワークやその他の周辺機器から

 出力: プログラムからデータを書き出す

 画面へ(これまでのSystem.out.print系)

 ファイルへ(今回の授業)

 ネットワークやその他の周辺機器へ

• ストリームオブジェクトが橋渡し

• 文字列とそれ以外(バイナリ)で異なる扱い

(4)

ファイル入出力の準備

 java.io パッケージをインポート

 io = Input Output 一般的な入出力のためのパッケージ

 packageの行の下あたりに,次の文を挿入

 例外処理 ( 実践編: p.33-)

 ファイルが見つからない,データが読み取れないなど トラブルがあった場合への備え

 トラブルが起こりそうな部分を try { } で囲い

検出されたトラブルへの対応を catch() { } で指示

 例えば

import java.io.*;

catch(IOException e) { System.out.println(e); } Eclipseが自動で

最小限のパッケージに置換

(5)

ファイルへの出力 ( 実践編: p.149-)

1. Fileクラスで書き込むファイルを指定

2. FileWriterクラスで書き込む機能を準備

3. BufferedWriterクラスで溜める機能を連結

4. 変数名.write(データ) の形でファイルやバッファに出力 5. 変数名.close() でファイルを閉じる

プログラム ファイル

プログラム

BufferedWriter FileWriter

ファイル プログラム

FileWriter

ファイル

出力するデータを 一時的に溜める

まとめてファイルに 書き込む

ちまちま書き込むのは効率が悪い

(6)

ファイル出力の例

try {

File file = new File("output.txt");

FileWriter fw = new FileWriter(file);

BufferedWriter bw = new BufferedWriter(fw);

for(int i = 0; i < 5; i++) { bw.write("[" + i + "]");

bw.newLine(); // 改行を出力 }

bw.close();

} catch(IOException e) { System.out.println(e);

}

[0]

[1]

[2]

[3]

[4]

実行結果:

output.txt の中身

(7)

入出力用のファイルはどこに?

 ファイルはプログラムを実行したフォルダ内に存在

 正確には,そのフォルダから見た,File()で指定する位置

 詳しくは「ファイルパス」について各自で調べること

 Eclipse を使っている場合

 パッケージ・エクスプローラで対象のプロジェクトを

右クリック→「Windowsエクスプローラ」(MacではFinder)

 フォルダの詳しい位置を知りたい場合は

右クリック→「プロパティ」→「リソース」→「ロケーション」

JARファイル,あるいはコマンド

srcではない

(8)

演習(課題1)

 指示に従ってファイルに出力してみよう

詳細は課題のページに!

(9)

余談: ファイルへの追記

 通常, FileWriter でファイルを指定すると その時点でファイルの内容が一旦消される

 new FileWriter(File 変数 , true) とすると

ファイルの内容を消さずに追記することが可能

(10)

余談: PrintWriter を利用したファイル出力

 BufferedWriter に PrintWriter を連結させておくと print() , println() , printf() を使うことが可能

try {

File file = new File("output.txt");

FileWriter fw = new FileWriter(file);

BufferedWriter bw = new BufferedWriter(fw);

PrintWriter pw = new PrintWriter(bw); // さらに連結 for(int i = 0; i < 5; i++) {

pw.println("[" + i + "]"); // ちゃんと改行される }

pw.close();

} catch(IOException e) { System.out.println(e);

}

(11)

ファイルからの入力 ( 実践編: p.156-)

1. Fileクラスで読み込むファイルを指定

2. FileReaderクラスで読み込む機能を準備

3. BufferedReaderクラスで溜める機能を連結

4. 変数名.read() の形でファイルやバッファから入力 変数名.readLine() の形で1行分の文字列を入力 5. 変数名.close() でファイルを閉じる

ファイル

FileReader BufferedReader

プログラム

ファイル

FileReader

プログラム

ファイルから

まとめて読み込む

入力するデータを 一時的に溜める

日本語等を含む場合 文字コードは

UTF-8のみOK

(12)

ファイル入力の例

try {

File file = new File("input.txt");

FileReader fr = new FileReader(file);

BufferedReader br = new BufferedReader(fr);

String s;

// ファイルの末尾に来るとnullになるため終了 while((s = br.readLine()) != null) {

System.out.println(s + "です");

}

br.close();

} catch(IOException e) { System.out.println(e);

}

ミミズです オケラです アメンボです

実行結果:

ミミズ

オケラ

アメンボ

(13)

演習(課題2)

 指示に従ってファイルから入力してみよう

 配布物のダウンロード&実行フォルダへの保存を忘れずに

詳細は課題のページに!

(14)

余談: Scanner を利用したファイル入力

 これまでと似た形でのファイル入力

1. java.util.Scanner をインポート

(いつもの課題で上の方に記述されている感じに)

2. new Scanner(File型変数) で準備完了 3. 変数名.nextLine() で1行読み込み

変数名.hasNext で次のデータが存在するか確認

変数名.useDelimiter("文字列") で

データを区切る文字列を変更(CSVなら",")

変数名.next() で次の区切りまでのデータを読み込み 4. 変数名.close() ファイルを閉じる

(15)

余談: Scanner を利用したファイル入力の例

try {

File file = new File("input.txt");

Scanner scan = new Scanner(file);

int line = 1;

while(scan.hasNext()){ // 次にデータがある場合は継続 String str = scan.next();

System.out.println(line + ":" + str);

line++;

}

scan.close();

} catch(FileNotFoundException e) { System.out.println(e);

}

1:ミミズ 2:オケラ 3:アメンボ

実行結果:

ミミズ

オケラ

アメンボ

参照

関連したドキュメント

WAV/AIFF ファイルから BR シリーズのデータへの変換(Import)において、サンプリング周波 数が 44.1kHz 以外の WAV ファイルが選択されました。.

CIとDIは共通の指標を採用しており、採用系列数は先行指数 11、一致指数 10、遅行指数9 の 30 系列である(2017

地域の名称 文章形式の表現 卓越もしくは変化前 断続現象 変化後 地域 風向 風向(数値) 風速 風力 起時

品名(Part name) 数量(Quantity).. 品名(Part name) 数量(Quantity).. 品名(Part name) 数量(Quantity).. 部品番号 (Part No.) 品名(Part name)

このように雪形の名称には特徴がありますが、その形や大きさは同じ名前で

機器名称 相 銘板容量(kW) 入力換算 入力容量(kW) 台数 現在の契約電力.

このよ うな塗 料系 のコ ーティ ング 膜では ,ひず みゲ ー ジ (48) や基板曲率法 (49)

日数 ワクチン名 製造販売業者 ロット番号 接種回数 基礎疾患等 症状名(PT名).