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

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

プログラミング第5回 1 while ループ 文字列の操作
第11回Javaゼミ 11.1 ファイルとディレクト リ 11.2 文字ストリーム 11.3 バッファ付き文字スト リーム 2006/06/28 神津 健太.
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
コンパイラ 2011年11月14日
プログラミング基礎I(再) 山元進.
IO - 入出力 小西 亨.
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
独習Java ・ 12.1  インターネットアドレス ・ 12.2  サーバーソケットとソケット  12月 19日    小笠原 一恵.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
アルゴリズムとデータ構造 2011年6月13日
社会人学習講座 「Javaプログラミング概論」
例外処理 Exception Handling
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
第12回独習Javaゼミ 12章セクション3~4 発表者 直江 宗紀.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
情報処理技法 (Javaプログラミング)2 第2回 前期の復習(2)
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
8.1 例外処理 8.2 catchブロックの検索 8.3 throwステートメント 8.4 例外とエラークラス 8.6 独自の例外
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
JAVA入門.
サブゼミ第9回 実装編③ 永続化とjava.ioパッケージ.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
UDPマルチキャストチャット                    空川幸司.
独習Java ・ 8.1  例外処理 ・ 8.2  catch ブロックの検索  12月 5日    小笠原 一恵.
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
安全なモバイルエージェント システム Flyingware のための 仮想ディスクの実現
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
リファレンスの復習と例外処理 2005年6月14日 海谷 治彦.
リファレンス,配列,例外処理 その他演習に役立つこと
暗号技術 ~JAVAプログラム③~ (7週目)
EclipseでWekaのAPIを呼び出す
暗号技術 ~JAVAプログラム①~ (5週目)
プログラミング演習I 2003年6月25日(第10回) 木村巌.
アルゴリズムとデータ構造演習(7月8日) 入出力ストリーム 2019/1/18.
画像処理プログラムの説明.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
ソフトウェア制作論 平成30年11月21日.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例
オブジェクト プログラミング 第2回 プログラムの基本.
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造演習(7月1日) 例外処理 2019/5/8.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
アルゴリズムとデータ構造 2012年6月11日
暗号技術 ~JAVAプログラム②~ (6週目)
ソフトウェア制作論 平成30年11月14日.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

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

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

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

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

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

例外オブジェクト 例外に指定できるオブジェクトは、Throwableでなければならない

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

例外処理の例 前半 class Divider { public static void main( String args[] ) { 例外処理の例 前半 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"); }

("ArrayIndexOutOfBoundsException"); 例外処理の例 後半 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[]) { 例外処理の例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 new ExceptionType(args); 新しいオブジェクトを作成して投げる 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クラス 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クラス 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でなければ、さらに入力を求める。 入力が終わったらデータをファイルに出力する。 不正な入力の時は、例外処理をする