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

Similar documents
JavaプログラミングⅠ

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

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

GEC-Java

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

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

PowerPoint Presentation

Microsoft PowerPoint - OOP.pptx

Prog2_10th

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

PowerPoint プレゼンテーション

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

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

Programming-C-9.key

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


Microsoft PowerPoint - prog13.ppt

Microsoft PowerPoint - prog13.ppt

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

Prog1_11th

Prog1_10th

Prog2_9th

r1.dvi

ÿþ˜u#u·0¹0Æ0à0

K227 Java 2

File IO

新・明解Java入門

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

Microsoft PowerPoint ppt

PowerPoint Presentation

Java講座

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

デジタル表現論・第6回

ファイル入出力Ⅱ

text_11.dvi

プログラミングA

PowerPoint Presentation

Prog1_15th

JavaプログラミングⅠ

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

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

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

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

PowerPoint プレゼンテーション

JavaプログラミングⅠ

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

GEC-Java

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

Microsoft Word - java a.doc

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

JavaプログラミングⅠ

問題1 以下に示すプログラムは、次の処理をするプログラムである

PowerPoint プレゼンテーション

2

JavaプログラミングⅠ

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

スライド 1

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

Microsoft PowerPoint - prog03.ppt

2

JavaプログラミングⅠ

JAVA 11.4 PrintWriter 11.5

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

プログラミング入門1

Java知識テスト問題

ファイル入出力Ⅰ

メソッドのまとめ

JAVA入門

プログラムの基本構成

プログラミング入門1

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

** 平成 16 年度 FE 午後問題 Java** 示現塾プロジェクトマネージャ テクニカルエンジニア ( ネットワーク ) など各種セミナーを開催中!! 開催日 受講料 カリキュラム等 詳しくは 今すぐアクセス!! 平成 16

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

文字列操作と正規表現

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

2

デジタル表現論・第4回

プログラミング入門1

PowerPoint プレゼンテーション

JAVA とテンプレート

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

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

プログラミング入門1

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

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

JavaプログラミングⅠ

Microsoft PowerPoint - chap10_OOP.ppt

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

情報処理Ⅰ

2

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

Javaの作成の前に

Prog1_2nd

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

基本情報STEP UP演習Java対策

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

JavaプログラミングⅠ

JavaプログラミングⅠ

Transcription:

例外処理と ファイル入出力 情報システム学科 平塚聖敏

例外処理とは プログラムの実行中に発生した問題を通知するために 実行時に生成される 例外の例 オブジェクト スタックオーバーフロー メモリ不足 配列の要素数を超えて参照しようとしたりする

例外処理の手順その 1 基本の例外処理 1. try ブロックで処理を囲む try{ // 処理 2. catch ブロックで例外を捕捉 catch ( 例外オブジェクトパラメータ ) { // 処理 3. finally ブロックで後処理 finally { // 処理

例外処理の手順その 1 の中身 1. try ブロックで例外が起こった場合 2. ブロック内の残りの処理をスキップ 3. catchブロックの例外を探索 4. 見つかれば その処理を行う 5. 無ければfinallyブロックに進む

try ブロックには try ブロックを書いたら 必ず catch ブロックまたは finally ブロックを書かなければならない catch ブロックの後に finally ブロックを書かなくても デフォルトの finally ブロックが生成され 実行される

例外オブジェクト 例外に指定できるオブジェクトは Throwable でなければならない Throwable は すべての例外クラスのスーパークラス

Error クラス Exception クラス Error クラス 通常のアプリケーションであればキャッチすべきでない重大な問題を指す Exception クラス 通常のアプリケーションでキャッチされる可能性のある状態を指す

例外処理の例前半 class Divider { public static void main( String args[] ) { try { System.out.println("Before Division"); int i = Integer.parseInt(args[0]); int j = Integer.parseInt(args[1]); System.out.println(i/j); System.out.println("After Division");

例外処理の例後半 catch (ArithmeticException e) { Sytem.out.println("ArithmeticException"); catch (ArrayIndexOutOfBoundsException e) { System.out.pritln ("ArrayIndexOutOfBoundsException"); catch (NumberFormatException e) { System.out.println("NumberFormatException"); finally { System.out.println("finally brock");

例外処理の例 2 前半 class ClassCast { public static void main(string args[]) { try { Object obj = new Integer("85"); Double dobj = (Double)obj; // ここで java.lang.classcastexception: //java.lang.integer の例外発生!! System.out.println("After cast"); catch (Exception e) { System.out.println(e);

Exception catch ブロックの最初の例外で Exception これは全ての例外クラスに該当 従って そのほかの例外を捕捉できない

Throw ステートメント 新しいオブジェクトを作成して投げる throw new ExceptionType(args); ExceptionType は例外オブジェクトの型 args はコンストラクタの引数リストで省略可能

Throw ステートメントの例 class ThrowDemo2 { public static void main(string args[]) { try { System.out.println("before a"); a(); System.out.println("after a"); catch (Exception e){ System.out.println("main : " + e); finally { System.out.println("main : finally "); 前半

Throw ステートメントの例 後半 public static void a() { try { System.out.println("before throw statement"); throw new ArithmeticException(); catch (Exception e) { System.out.println("a : " + e); finally { System.out.println("a : finally");

Throws ステートメント 書く理由 利点 呼び出し元に対して例外を投げる可能性があるメソッドを書いた場合 どの例外が投げられるのかを明示しておくと便利 それらの例外に対処することができる ほかのプログラマが書いたコード どの例外が投げられるか分かる この Java 言語の機能を利用すれば エラーの起こりにくいプログラムを作成できる

throws の例前半 public class ThrowsDemo { public static void main(string[] args) { try { getratio(args); catch(exception e){ System.out.println(e); finally{ System.out.println("main : finally");

throws の例後半その 1 public static void getratio(string str[]) throws ArithmeticException, ArrayIndexOutOfBoundsException, NumberFormatException{ try{ double r = Double.parseDouble(str[0]); double f = Double.parseDouble(str[1]); if ( f==0.0) { throw new ArithmeticException(); System.out.println(" 比は " + r/f + " です ");

throws の例後半その 2 catch(arithmeticexception e){ System.out.println("getRatio : ArithmeticException" + e); throw new ArithmeticException(); catch(arrayindexoutofboundsexception e){ System.out.println("getRatio : " + e); throw new ArrayIndexOutOfBoundsException(); catch(numberformatexception e){ System.out.println("getRatio :" + e); throw new NumberFormatException(); finally { System.out.println("getRatio : finally");

ファイル入出力 ファイルとディレクトリ File クラスは ファイルとディレクトリのプロパティに関する情報をカプセル化したクラス プロパティには 読み取り 書き込み 前回の修正時刻 長さが含まれる ディレクトリに収めるファイルを指定できる 新しいディレクトリを作成したり 既存のファイル ディレクトリを削除 名前変更ができる

File コンストラクタ File(String path) ファイルまたはディレクトリのパスを指定 File(String directorypath, Stringn filename) ディレクトリパスとディレクトリ内のファイル名 File(File directory, String filename) ディレクトリのファイルオブジェクトとディレクトリ内のファイル名 path または filename が null の場合 NullPointerException を投げる

File クラスの例 import java.io.*; public class FileDemo { public static void main(string[] args) { try { System.out.println("pathSeparatorChar = " +File.pathSeparatorChar); System.out.println("separatorChar = " +File.separatorChar); File file = new File(args[0]); System.out.println("getName()= " +file.getname()); System.out.println("getParent() = " +file.getparent()); System.out.println("getAbsolutePath() = " + file.getabsolutepath()); System.out.println("canRead() = " +file.canread()); catch (Exception e){ e.printstacktrace();

ストリーム ストリームとは データのソースまたはデスティネーションの抽象的な概念 ストリームにより 同じテクニックで各種の物理デバイスに接続できる 1 つの入力ストリームで キーボード ファイル メモリバッファなど異なるデバイスからそのデータを読み取ることができる また出力ストリームで モニタ ファイル メモリバッファと異なったデバイスにデータを書き込める

文字ストリーム 文字ストリームとバイトストリームの2タイプ バイトストリーム バイナリデータの読み書き 文字ストリーム 文字および文字列の読み書き 入力文字ストリーム : バイトを文字に変換 出力ストリーム : 文字をバイトに変換する Javaは 内部で文字を16ビットのUnicodeで表す

クラスの階層 Object--+---Reader--+----BufferedReader +----InputStreamReader- ---FileReader +------Writer--+----BufferedWriter +---OutputStreamWriter----FileWriter +---PrintWriter

Writer クラス Write オブジェクトに基づいて同期化を行う抽象クラス OutputStreamWriter クラス Writer クラスを拡張したクラス FileWriter クラス OutputStreamWriter クラスを拡張したクラス

Witer クラスのメソッド 全てのメソッドが IOException を投げる abstract void close() throws IOException abstract void flush() throws IOException void write(int c) throws IOException void write(char buffer[]) throws IOException abstract void write(char buffer[], int index, int size) throws IOException void write(string s) throws IOException void write(string s, index, int size) throws IOException

Reader クラス 全ての文字入力ストリームに利用できる機能が定義されている抽象クラス InputStreamReader クラス Reader クラスを拡張したクラス FileReader InputStreamReader クラスを拡張したクラス

ファイルに文字を書き込む例 import java.io.*; public class FileWriterDemo { public static void main(string[] args) { try { FileWriter fw = new FileWriter(args[0]); for(int i = 0; i<12; i++){ fw.write("line " + i + " n"); fw.close(); catch (Exception e){ System.out.println("Exception : "+ e);

ファイルに文字を読み込む例 import java.io.*; public class FileReaderDemo { public static void main(string[] args) { try { FileReader fr = new FileReader(args[0]); int i; while( (i=fr.read())!= -1){ System.out.print((char)i); fr.close(); catch(exception e){ System.out.println("Exception :" + e);

バッファ付き文字ストリーム バッファ付き文字ストリームを用いると 物理デバイスへの読み書きの回数が減らせる クラス BufferedWriter BufferedReader

BufferedWriter Witer クラスの全てのメソッドを実装 改行文字の出力するメソッド newline() throws IOException

BufferedReader Reader クラスの全てのメソッドを実装 改行文字までを読み込むメソッド readline() throws IOException

BufferedWriter の例 import java.io.*; public class BufferedWriterDemo { public static void main(string[] args) { try { FileWriter fw = new FileWriter(args[0]); BufferedWriter bw = new BufferedWriter(fw); for(int i = 0; i<12; i++){ bw.write("line "+ i + " n"); bw.close(); catch(exception e){ System.out.println("Exception" + e);

BufferedReader の例 import java.io.*; public class BufferedReaderDemo { public static void main(string[] args) { try { FileReader fr = new FileReader(args[0]); BufferedReader br = new BufferedReader(fr); String s; while( (s=br.readline())!= null){ System.out.println(s); fr.close(); catch(exception e){ System.out.println("Exception :" + e);

標準入力 import java.io.*; // 無限ループのプログラム public class ReadConsole { public static void main(string[] args) { try { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String s; while( (s=br.readline())!= null) { System.out.println(s.length()); isr.close(); catch(exception e){ System.out.println("Exception : " + e);

PrintWriter クラス Writer クラスを拡張したクラス int, float, char などの基本データ型およびオブジェクトと等価な文字列を表示する

PrintWriter クラスの例 import java.io.*; public class PrintWriterDemo { public static void main(string[] args) { try { PrintWriter pw = new PrintWriter("abc.txt"); pw.println(true); pw.println('a'); pw.println(23.45); pw.println("hello"); pw.close(); catch(exception e){ System.out.println("Exception : " + e);

例外処理の問題 ユーザーがキーボードからデータを入力し 入力されたデータの平均値を求めるプログラムを作成したい 用意するデータは double 型で 配列要素数は 5 個 捕捉する例外はつぎの 3 つとする ArithmeticException 入力データなしのとき IndexOutOfBoundsException データ数が合わないとき NumberFormatException 入力データが不正なとき

入出力 ユーザーが 999 の数を入力するまで 入力を求め ファイルに入力されたデータを書き込むプログラムを作成したい 書き込むファイル名を指定する データ入力を求める 999 でなければ さらに入力を求める 入力が終わったらデータをファイルに出力する 不正な入力の時は 例外処理をする