Microsoft PowerPoint - java2-lecture2.ppt [호환 모드]

Similar documents
(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 09. 예외처리

Microsoft PowerPoint - java1-lecture9.ppt [호환 모드]

슬라이드 1

PowerPoint 프레젠테이션

(Microsoft PowerPoint - java2-lecture2.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - java1-lecture3.ppt [호환 모드]

PowerPoint Presentation

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

12-file.key

Cluster management software

JAVA PROGRAMMING 실습 08.다형성

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - java2-lab2-DirectoryImageConverter.pptx

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

C++ Programming

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

PowerPoint Template

PowerPoint Presentation

Semantic Consistency in Information Exchange

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

9장.예외와 단정

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

PowerPoint Presentation

제11장 자바 입출력

rmi_박준용_final.PDF

Microsoft PowerPoint - 03-TCP Programming.ppt

Microsoft PowerPoint - 3장

Network Programming

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

윤성우의 열혈 TCP/IP 소켓 프로그래밍

슬라이드 1

PowerPoint 프레젠테이션

파일로출력하는작업순서 1. 파일을연다. 2. 파일로자료를쓴다. 3. 파일을닫는다. 파일입출력에사용되는클래스들. FileInputStream, FileOutputStream, FileReader, FileWriter 문자단위로입출력하기 사람이읽을수있는문자로만구성된파일을읽

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

PowerPoint Presentation

Java

歯JavaExceptionHandling.PDF

4장.문장

Design Issues

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint Presentation

PowerPoint 프레젠테이션

No Slide Title

Microsoft PowerPoint - 2강

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

슬라이드 1

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

Microsoft PowerPoint - lec11_1516.ppt [호환 모드]

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lect04.pptx

제11장 프로세스와 쓰레드

Network Programming

Java ...

쉽게

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

PowerPoint 프레젠테이션

설계란 무엇인가?

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

12-file.key

<4D F736F F F696E74202D20B3D7C6AEBFF6C5A9C7C1B7CEB1D7B7A1B9D65F FBCD2C4CF5FC3A4C6C35FBFA1C4DA2E BC8A3C8A

PowerPoint Presentation

JUNIT 실습및발표

PowerPoint Presentation

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

금오공대 컴퓨터공학전공 강의자료

JAVA PROGRAMMING 실습 05. 객체의 활용

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Microsoft PowerPoint 웹 연동 기술.pptx

JAVA PROGRAMMING 실습 02. 표준 입출력

TEST BANK & SOLUTION

교육자료

PowerPoint 프레젠테이션

02 C h a p t e r Java

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

PowerPoint Presentation

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint 프레젠테이션

신림프로그래머_클린코드.key

ThisJava ..

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

PowerPoint 프레젠테이션

OCW_C언어 기초

Transcription:

스트림 FileIO, Exception Handling 514770 2018 년가을학기 9/17/2018 박경신 자바의스트림 자바스트림은입출력장치와자바응용프로그램연결 입출력장치와프로그램사이의데이터흐름을처리하는소프트웨어모듈 입력스트림 입력장치로부터자바프로그램으로데이터를전달하는소프트웨어모듈 출력스트림 자바프로그램에서출력장치로데이터를보내는소프트웨어모듈 입출력스트림기본단위 : 바이트자바입출력스트림특징 단방향스트림, 선입선출구조 자바의입출력스트림종류 JDK 의바이트스트림클래스계층구조 바이트입출력스트림과문자입출력스트림 바이트입출력스트림 입출력되는데이터를단순바이트의스트림으로처리 예 ) 바이너리파일을읽는입력스트림 문자입출력스트림 문자만입출력하는스트림 문자가아닌바이너리데이터는스트림에서처리하지못함 예 ) 텍스트파일을읽는입력스트림 JDK 는입출력스트림을구현한다양한클래스제공 클래스이름이공통적으로 Stream 으로끝남

JDK 의문자스트림클래스계층구조 클래스이름이공통적으로 Reader/Writer 로끝남 바이트스트림클래스 바이트스트림 바이트단위의바이너리값을읽고쓰는스트림 바이트스트림클래스 java.io 패키지에포함 InputStream/OutputStream 추상클래스 바이트스트림을다루는모든클래스의슈퍼클래스 FileInputStream/FileOutputStream 파일로부터바이트단위로읽거나저장하는클래스 바이너리파일의입출력용도 DataInputStream/DataOutputStream 자바의기본데이터타입의값 ( 변수 ) 을바이너리값그대로입출력 문자열도바이너리형태로입출력 FileInputStream 을이용한파일읽기 파일전체를읽어화면에출력하는코드샘플 FileInputStream fin = new FileInputStream("c:\\test.txt"); int c; while((c = fin.read())!= -1) { System.out.print((char)c); fin.close(); C:\test.txt 파일을열고파일과입력바이트스트림객체 fin 연결 파일끝까지바이트씩 c 에읽어들임. 파일의끝을만나면 read() 는 -1 리턴 바이트 c 를문자로변환하여화면에출력 스트림을닫음. 파일도닫힘. 스트림과파일의연결을끊음. 더이상스트림으로부터읽을수없음 문자스트림클래스 문자스트림 유니코드로된문자를입출력하는스트림 문자로표현되지않는데이터는다루지않음 문자스트림은이미지, 동영상과같은바이너리데이터는입출력할수없음 - 문자스트림은문자데이터만입출력가능 문자스트림을다루는클래스 Reader/Writer java.io 패키지에포함 추상클래스. 문자스트림을다루는모든클래스의슈퍼클래스 InputStreamReader/OutputStreamWriter 바이트스트림과문자스트림을연결시켜주는다리역할 지정된문자집합이용 InputStreamReader : 바이트를읽어문자로인코딩 OutputStreamWriter : 문자를바이트로디코딩하여출력 FileReader/FileWriter 텍스트파일에서문자데이터입출력

FileReader 를이용한텍스트파일읽기 system.ini 파일전체를읽어화면에출력하는코드샘플 import java.io.*; public class FileReaderEx { FileReader in = null; // 파일로부터문자입력스트림생성 in = new FileReader("c:\\windows\\system.ini"); int c; while ((c = in.read())!= -1) { // 한문자씩읽는다. System.out.print((char)c); in.close(); catch (IOException e) { System.out.println(" 입출력오류 "); C:\Windows\system.ini 파일을열고문자입력스트림연결 파일의끝을만나면 read() 는 -1 리턴 버퍼입출력스트림클래스 버퍼스트림 버퍼를가진스트림으로써입출력데이터를일시적으로저장하는버퍼를이용하여입출력효율개선 입출력시운영체제의 API 호출횟수를줄여입출력성능개선 출력시여러번출력되는데이터를버퍼에모아두고한번에장치로출력 입력시입력데이터를버퍼에모아두고한번에프로그램에게전달 바이트버퍼스트림클래스 BufferedInputStream와 BufferedOutputStream 바이트단위의바이너리데이터 (Binary Data) 를처리하는버퍼스트림 문자버퍼스트림클래스 BufferedReader와 BufferedWriter 유니코드의문자데이터 (Text Data) 만처리하는버퍼스트림 텍스트파일읽기 BufferedReader 클래스를사용한텍스트파일 read import java.io.*; public class BufferedReaderExample { public static void main(string args[]) throws Exception{ FileReader fr = new FileReader("C:/test.txt"); BufferedReader br = new BufferedReader(fr); int ch; while((ch=br.read())!=-1){ 파일전체를읽어화면에출력 System.out.print((char)ch); br.close(); fr.close(); 텍스트파일읽기 BufferedReader 클래스를사용한텍스트파일 readline ( 파일을한줄씩읽어서 lines 배열에저장 ) import java.io.*; public class BufferedReaderExample2 { static String[] lines = new String[10]; // 10 개의라인배열 public static void main(string args[]) throws Exception{ BufferedReader br = new BufferedReader(new FileReader("C:/test.txt")); int i = 0; String line = ""; while ((line=br.readline())!= null){ 한줄씩읽어 lines 배열에저장 lines[i++] = line; br.close(); for (String l : lines) System.out.println(l); // lines 배열출력

File 클래스 File 클래스생성자와주요메소드 File 클래스 파일의경로명을다루는클래스 java.io.file 파일과디렉터리경로명의추상적표현 파일이름변경, 삭제, 디렉터리생성, 크기등파일관리 File 객체는파일읽고쓰기기능없음 파일입출력은파일입출력스트림이용 14 File 클래스예제 예외와예외클래스 파일객체생성 파일인지디렉터리인지구분 서브디렉터리리스트얻기 File f = new File("c:\\test.txt"); File f = new File("c:\\windows\\system.ini"); String res; if(f.isfile()) // 파일타입이면 res = " 파일 "; else // 디렉터리타입이면 res = " 디렉터리 "; System.out.println(f.getPath() + " 은 " + res + " 입니다."); c:\windows\system.ini 은파일입니다. File f = new File("c:\\tmp\\java_sample"); String[] filenames = f.list(); // 파일명리스트얻기 for (int i=0; i<filenames.length; i++) { File sf = new File(f, filenames[i]); System.out.print(filenames[i]); System.out.print("\t 파일크기 : " + sf.length()); 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음

예외와예외클래스 예외의종류 일반예외 ( 컴파일체크 Exception) 컴파일하는과정에서예외처리코드가필요한지검사 예외처리코드없으면컴파일오류발생 실행예외 (RuntimeException) 예외처리코드를생략하더라도컴파일이되는예외 ' 경험 따라예외처리코드작성필요 예외클래스 예외클래스 Java 는예외를클래스로관리 JVM 이프로그램을실행하는도중에예외가발생하면해당예외클래스로객체를생성 예외처리코드에서예외객체를이용 자주발생하는예외 실행예외 (RuntimeException) NullPointerException 객체참조가없는상태 null 값갖는참조변수로객체접근연산자인도트 (.) 사용했을때발생 ArrayIndexOutOfBoundsException 배열에서인덱스범위초과하여사용할경우발생 실행시매개값을주지않을경우예외발생

실행예외 (RuntimeException) NumberFormatException 숫자로변환될수없는문자가포함되어있는문자열을숫자로변경할경우 Integer.parseInt(String s) Double.parseDouble(String s) 실행예외 (RuntimeException) ClassCastException 타입변환이되지않을경우발생 public class NumberFormatExceptionExample { String data1 = "100"; String data2 = "a100"; 정상코드 int value1 = Integer.parseInt(data1); int value2 = Integer.parseInt(data2); int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result); 예외발생코드 실행예외 (RuntimeException) ClassCastException 타입변환이되지않을경우발생 public class NumberFormatExceptionExample { Dog dog = new Dog(); changedog(dog); Cat cat = new Cat(); changedog(cat); public static void changedog(animal animal) { //if(animal instanceof Dog) { Dog dog = (Dog) animal; //ClassCastException 발생가능 // class Animal { class Dog extends Animal { class Cat extends Animal { 예제 : ArithmeticException 예외처리 try-catch 문을이용하여정수를 0 으로나누려고할때 "0 으로나룰수없습니다." 라는경고메시지를출력하도록프로그램을작성하시오. import java.util.scanner; public class ExceptionExample2 { public static void main (String[] args) { Scanner rd = new Scanner(System.in); int divisor = 0; int dividend = 0; System.out.print(" 나뉨수를입력하시오 :"); dividend = rd.nextint(); System.out.print(" 나눗수를입력하시오 :"); divisor = rd.nextint(); System.out.println(dividend+" 를 "+divisor+" 로나누면몫은 "+ dividend/divisor+" 입니다."); catch (ArithmeticException e) { System.out.println("0으로나눌수없습니다."); 나뉨수를입력하시오 :100 나눗수를입력하시오 :0 0 으로나눌수없습니다. ArithmeticException 예외발생

예제 : 범위를벗어난배열의접근 배열의인덱스가범위를벗어날때발생하는 ArrayIndexOutOfBoundsException을처리하는프로그램을작성하시오. public class ArrayException { public static void main (String[] args) { int[] intarray = new int[5]; i가 4일때 ArrayIndexOutOfBoundsException intarray[0] = 0; 예외발생 for (int i = 0; i < 5; i++) { intarray[i+1] = i+1 + intarray[i]; System.out.println("intArray["+i+"]"+"="+intArray[i]); catch (ArrayIndexOutOfBoundsException e) { System.out.println(" 배열의인덱스가범위를벗어났습니다."); intarray[0]=0 intarray[1]=1 intarray[2]=3 intarray[3]=6 배열의인덱스가범위를벗어났습니다. 예제 : 정수가아닌문자열을정수로변환할때예외발생 문자열을정수로변환할때발생하는 NumberFormatException 을처리하는프로그램을작성하라. public class NumException { public static void main (String[] args) { String[] stringnumber = {"23", "12", "998", "3.141592"; for (int i = 0; i < stringnumber.length; i++) { int j = Integer.parseInt(stringNumber[i]); System.out.println(" 숫자로변환된값은 " + j); catch (NumberFormatException e) { System.out.println(" 정수로변환할수없습니다."); 숫자로변환된값은 23 숫자로변환된값은 12 숫자로변환된값은 998 정수로변환할수없습니다. 3.141592 를정수로변환할때 NumberFormatException 예외발생 예외처리코드 (try-catch-finally) 예외처리코드 예외발생시프로그램종료막고, 정상실행유지할수있도록처리 일반예외 : 반드시작성해야컴파일가능 실행예외 : 컴파일러가체크해주지않으며개발자경험의해작성 try catch finally 블록이용해예외처리코드작성 예외처리코드 (try-catch-finally) public class TryCatchFinallyRuntimeExceptionExample { String data1 = null; String data2 = null; 실행시매개값을주지않을경우예외발생 data1 = args[0]; data2 = args[1]; catch(arrayindexoutofboundsexception e) { System.out.println(" 실행매개값의수가부족합니다."); System.out.println("[ 실행방법 ]"); System.out.println("java TryCatchFinallyRuntimeExceptionExample num1 num2"); return; int value1 = Integer.parseInt(data1); 실행시매개값을잘못주었을경우예외발생 int value2 = Integer.parseInt(data2); int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result); catch(numberformatexception e) { System.out.println(" 숫자로변환할수없습니다."); finally { System.out.println(" 다시실행하세요.");

다중 catch 하나의 try 블록내부에서다양한종류의예외발생시 각예외별로예외처리코드 (catch 블록 ) 다르게구현 단하나의 catch 블록만실행 public class CatchByExceptionKindExample { String data1 = args[0]; String data2 = args[1]; 실행시매개값을주지않을경우예외발생 int value1 = Integer.parseInt(data1); int value2 = Integer.parseInt(data2); 실행시매개값을잘못주었을경우예외발생 int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result); catch(arrayindexoutofboundsexception e) { System.out.println(" 실행매개값의수가부족합니다."); System.out.println("[ 실행방법 ]"); System.out.println("java CatchByExceptionKindExample num1 num2"); catch(numberformatexception e) { System.out.println(" 숫자로변환할수없습니다."); finally { System.out.println(" 다시실행하세요."); 하위예외는상위예외를상속 하위예외는상위예외타입도됨 catch 순서 상위예외가아래에위치해야 상위예외 Exception 이위에있을경우 상위예외 Exception 이아래에있을경우 public class CatchOrderExample { String data1 = args[0]; String data2 = args[1]; int value1 = Integer.parseInt(data1); int value2 = Integer.parseInt(data2); int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result); catch(arrayindexoutofboundsexception e) { System.out.println(" 실행매개값의수가부족합니다."); catch(exception e) { System.out.println(" 실행에문제가있습니다."); finally { System.out.println(" 다시실행하세요.");

멀티 (multi) catch 자바 7부터는하나의 catch 블록에서여러개의예외처리가능 동일하게처리하고싶은예외를 로연결 public class MultiCatchExample { String data1 = args[0]; String data2 = args[1]; 실행시매개값을주지않을경우예외발생 int value1 = Integer.parseInt(data1); 실행시매개값을잘못주었을경우예외발생 int value2 = Integer.parseInt(data2); int result = value1 + value2; System.out.println(data1 + "+" + data2 + "=" + result); catch(arrayindexoutofboundsexception NumberFormatException e) { System.out.println(" 실행매개값의수가부족하거나숫자로변환할수없습니다.."); catch(exception e) { System.out.println(" 알수없은예외발생 "); finally { System.out.println(" 다시실행하세요."); 자동리소스닫기 try-with-resources 예외발생여부와상관없음 사용했던리소스객체의 close() 메소드호출해리소스닫음 리소스객체 각종입출력스트림, 서버소켓, 소켓, 각종채널 java.lang.autocloseable 인터페이스구현하고있어야함 예외떠넘기기 (throws) throws 메소드선언부끝에작성 메소드내에서처리하지않은예외를메소드호출한곳 (calling method) 으로떠넘기는역할

예외떠넘기기 (throws) throws throws 선언된메소드를호출하는메소드 (calling method) 는 1. 반드시 try 블록내에서호출 2. catch 블록에서떠넘겨받은예외를처리함 3. try-catch 블록으로예외처리를하지않고 throws 키워드로자신도다시예외를떠넘길수있음 3. throws ClassNotFoundException 1. try block 1.2 2. catch block 사용자정의예외와예외발생 사용자정의예외 (user-defined exception) 클래스선언 자바표준 API 에서제공하지않는예외 애플리케이션서비스와관련된예외, Application Exception E.g. 잔고부족예외, 계좌이체실패예외, 회원가입실패예외. 사용자정의예외클래스선언방법 1. 예외클래스상속 일반예외 : Exception class 상속 실행예외 : RuntimeException class 상속 2. 생성자정의 매개변수없는기본생성자, String 타입의매개변수를갖는생성자 1.1 예외발생 사용자정의예외와예외발생 사용자정의예외와예외발생 예외발생시키기 (throw) 코드에서예외발생시키는법 - 예외객체생성 호출한곳에서발생한예외를처리하도록 public class BalanceInsufficientException extends Exception { public BalanceInsufficientException() { public BalanceInsufficientException(String message) { super(message); public class Account { private long balance; public Account() { 1. Exception class 상속 2. constrctors 생성 public long getbalance() { return balance; public void deposit(int money) { balance += money; 4. 호출한곳에서발생한예외를처리하도록함 public void withdraw(int money) throws BalanceInsufficientException { if(balance < money) { 3. 사용자정의예외발생 예외객체생성 throw new BalanceInsufficientException(" 잔고부족 :"+(money-balance)+" 모자람 ); balance -= money;

사용자정의예외와예외발생 public class AccountExample { 예외정보얻기 getmessage() 예외발생시킬때생성자매개값으로사용한메시지리턴 Account account = new Account(); // 예금하기 account.deposit(10000); System.out.println(" 예금액 : " + account.getbalance()); // 출금하기 account.withdraw(30000); catch(balanceinsufficientexception e) { String message = e.getmessage(); System.out.println(message); System.out.println(); e.printstacktrace(); 5. try block에서메소드호출 6. catch block에서사용자정의예외처리 7. 예외정보얻기 (8 절 ) 원인세분화하기위해예외코드포함 ( 예 : 데이터베이스예외코드 ) catch() 절에서활용 예외정보얻기 printstacktrace() 예외발생코드를추적하여모두콘솔에출력 프로그램테스트하면서오류찾을때유용하게활용