1 / 27

8 장 자바 입출력

8 장 자바 입출력. 자바 입출력. File 클래스 입출력 스트림 클래스 예외 final 수정자. 자바 입출력. File 클래스 파일이나 디렉토리를 생성 , 삭제 , 이름 변경 등을 정의해놓은 클래스가 File 클래스임 . File 클래스 객체는 파일이나 디렉토리를 생성 , 삭제 , 변경하는 것 외어 입출력 클래스와 같이 사용하여 파일에 데이터를 입출력 할 수 있음 File 클래스 객체를 생성하기 위해 사용될 수 있는 생성자. 자바 입출력.

trella
Download Presentation

8 장 자바 입출력

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 8장 자바 입출력

  2. 자바 입출력 • File 클래스 • 입출력 스트림 클래스 • 예외 • final 수정자

  3. 자바 입출력 • File 클래스 • 파일이나 디렉토리를 생성, 삭제, 이름 변경 등을 정의해놓은 클래스가 File 클래스임. • File 클래스 객체는 파일이나 디렉토리를 생성, 삭제, 변경하는 것 외어 입출력 클래스와 같이 사용하여 파일에 데이터를 입출력 할 수 있음 • File 클래스 객체를 생성하기 위해 사용될 수 있는 생성자.

  4. 자바 입출력 • 생성된 File 클래스 객체를 조작하기 위한 중요 메서드.

  5. 자바 입출력 • 예제 // File 클래스를 사용하기 위해 java.io 패키지를 import 한다. import java.io.*; import java.util.*; class FileExam { public static void main(String args[]) { // "c:\test" 디렉토리에 해당하는 File 클래스 객체를 생성한다. File dir = new File("c:\\test"); // File 클래스 객체 dir과 파일 이름 "file.txt"를 인자로 받아 "c:\test\file.txt" 파일에 // 해당하는 File 객체를 생성한다. File file = new File(dir, "file.txt"); // File 클래스의 isDirectory()를 호출하여 dir이 디렉토리인지 검사한다. // dir은 디렉토리임으로 if문의 실행문을 실행한다. if(dir.isDirectory()) { System.out.println("File 클래스 객체 dir은 디렉토리입니다."); // list() 메서드를 호출해 디렉토리에 있는 파일과 디렉토리 목록을 String형 배열로 구한다. String files[] = dir.list(); System.out.println("디렉토리의 파일 목록 : "); for(int index=0; index < files.length; index++) { System.out.println(" "+files[index]); } }

  6. 자바 입출력 // getParent() 메서드를 호출해 상위 디렉토리의 경로를 구한다. // "c:\test" 디렉토리의 상위경로인 "c:\"를 반환한다. System.out.println("상위 디렉토리 : " + dir.getParent()); // getName() 메서드를 호출해 디렉토리의 이름을 구한다. // 경로를 제외한 나머지를 반환함으로 "test"를 반환한다. System.out.println("디렉토리의 이름 : " + dir.getName()); // getPath() 메서드를 호출해 파일이나 디렉토리의 전체 경로를 구한다. System.out.println("디렉토리의 경로 : " + dir.getPath()); // isFile() 메서드를 호출하여 file이 파일인지 검사한다. if(file.isFile()) { System.out.println("File 클래스 객체 file은 파일입니다."); System.out.println("마지막 수정시간 : "+ new Date(file.lastModified())); System.out.println("파일의 크기 "+ file.length() + "byte"); } // getParent() 메서드를 호출해 상위 디렉토리의 경로를 구한다. System.out.println("상위 디렉토리 : " + file.getParent()); // getName() 메서드를 호출해 디렉토리의 이름을 구한다. System.out.println("파일의 이름 : " + file.getName()); // getPath() 메서드를 호출해 파일이나 디렉토리의 전체 경로를 구한다. System.out.println("파일의 경로 : " + file.getPath()); } }

  7. 자바 입출력 • 실행결과

  8. 자바 입출력 • 자바의 입출력 스트림 • 입출력 데이터의 추상적인 표현. • 프로그래머가 스트림 객체를 이용하면 실제 하드웨어 장치와 상관없이 일관된 방법으로 입출력을 처리할 수 있기 때문임. • 이런 스트림은 키보드, 파일 등의 입력장치로부터 데이터를 읽어 들이는 입력 스트림과 모니터, 파일 등의 출력장치로 데이터를 출력하는 출력 스트림으로 분류 할 수 있음. • 문자 스트림과 바이트 스트림으로 분류 할 수 있는데 문자 스트림은 16비트 문자나 문자열들을 읽고 쓰기 위한 스트림이고 바이트 스트림은 8비트의 바이트를 읽고 쓰기 위한 스트림 임.

  9. 자바 입출력 • 자바에서 입출력을 위해 제공하는 스트림 클래스 • 문자 스트림의 계층 구조도 • 바이트 스트림의 계층 구조도

  10. 자바 입출력 • 문자 입출력 스트림 클래스는 16비트(유니코드) 단위로 입출력을 하며 주로 텍스트 형태의 데이터를 읽고 쓰는데 사용됨. • 문자 입출력 스트림의 중요 메서드 • 문자 입력 스트림의 중요 메서드

  11. 자바 입출력 • 문자 출력 스트림의 중요 메서드

  12. 자바 입출력 • 예제 import java.io.*; // 입출력 스트림을 사용하기 위해 java.io 패키지를 import 한다. public class CharStreamExam { public static void main(String args[]) { try { // File 클래스 객체를 인자로 FileReader 클래스 객체를 생성한다. // File 클래스 객체가 아닌 문자열을 바로 입력해도 FileReader 클래스 객체는 생성된다. FileReader fr = new FileReader(new File("c:\\test\\file.txt")); // 생성한 FileReader 클래스 객체를 BufferedReader와 결합하여 사용한다. BufferedReader br = new BufferedReader(fr); // 바이트 출력 스트림인 System.out를 문자 출력 스트림으로 사용하기 위해 // OutputStreamWriter 객체를 생성한다. OutputStreamWriter osw = new OutputStreamWriter(System.out); String line = null; // BufferedReader 클래스의 readLine() 메서드를 호출해 파일을 한 줄씩 읽어온 값이 // null일 때가지 루프를 반복한다. while((line=br.readLine())!= null) { // Writer 클래스의 write() 메서드를 호출해 읽어온 문자열을 출력한다. readLine() 메서드를 // 사용해 문자열을 읽으면 개행문자를 읽지 않으므로 "\n"을 같이 출력해 커서를 다음 라인에 // 위치 시킨다. osw.write(line+"\n"); // write() 메서드를 사용해 버퍼에 쓴 내용을 해당 출력 장치로 내보낸다. osw.flush(); } /* …사용한 입출력 스트림을 close() 메서드를 사용해서 닫는 것을 구현 … */ // 스트림을 통해 입출력을 수행하는 동안 발생하는 예외를 처리하기위해 IOException을 // try catch문을 사용해 처리한다. }catch(IOException ioe) {} } }

  13. 자바 입출력 • 실행결과

  14. 자바 입출력 • 바이트 입출력 스트림 클래스는 8비트 단위로 입출력을 하며 텍스트 형태의 데이터뿐만 아니라 이진 데이터를 읽는데도 유용하게 사용할 수 있음. • 바이트 입출력 스트림은 8비트 단위로 입출력 함으로 텍스트 형식의 데이터를 입출력 할 때 약간의 주의가 필요함. • 아스키코드와 같이 8비트보다 작은 문자 코드로 된 파일을 읽을 때는 문제가 없지만 유니코드와 같은 텍스트 데이터를 읽을 때는 인코딩을 해주어야 올바른 데이터를 화면에 출력할 수 있음.

  15. 자바 입출력 • 바이트 입출력 스트림의 중요 메서드 • 바이트 입력 스트림의 중요 메서드 • 바이트 출력 스트림의 중요 메서드

  16. 자바 입출력 • 예제 import java.io.*; // 입출력 스트림을 사용하기 위해 java.io 패키지를 import 한다. public class ByteStreamExam { public static void main(String args[]) { try { // 프롬프트창으로부터 입력받기위한 입력 스트림 System.in을 인자로 BufferedInputStream 클래스 객체를 생성한다. BufferedInputStream bis = new BufferedInputStream(System.in); // 프로프트창에 출력하기위한 출력 스트림 System.out을 인자로 BufferedOutputStream 클래스 객체를 생성한다. BufferedOutputStream bos = new BufferedOutputStream(System.out); //BufferedInputStream 클래스의 read() 메서드를 사용해 데이터를 읽어들이기 위한 버버로 byte 배열을 사용한다. byte buf[] = new byte[64]; // 스트림으로부터 읽어들인 바이트 수를 기록하기위한 int형 변수 int len = 0; // write() 메서드를 사용해 문자열을 출력하기위해 String 클래스의 getBytes() 메서드로 문자열을 byte 배열로 변환한다. bos.write("문자열을 입렵하세요 : \n".getBytes()); // 출력 스트림에 쓴 내용을 flush() 메서드를 사용해 해당장치로 출력한다. bos.flush(); while((len=bis.read(buf))!= -1) { bos.write(buf, 0, len); bos.flush(); } // 사용한 입출력 스트림을 close() 메서드를 사용해서 닫는다. bis.close(); bos.close(); // 스트림을 통해 입출력을 수행하는 동안 발생하는 예외를 처리하기위해 IOException을 try catch문을 사용해 처리한다. }catch(Exception e) {} } }

  17. 자바 입출력 • 실행결과

  18. 자바 입출력 • 예외(Exception) • 예외란 프로그램 실행 중에 발생하는 오류를 말함. • 자바는 예외를 객체로 취급하며, 각 상황에 따른 예외 관련 클래스를 제공하고 있고 상속을 통해 확장할 수 있음. • 자바의 예외처리는 자바 프로그램을 좀 더 견고하게 만듬.

  19. 자바 입출력 • 예외 클래스의 계층 구조도

  20. 자바 입출력 • 50여개의 예외 클래스 중 중요 클래스의 구조임. • Throwable 클래스는 Error 클래스와 Exception 클래스를 하위 클래스로 가짐. • Error 클래스는 주로 하드웨어 관련 예외를 처리하기 위한 클래스 임. 이런 종류의 예외는 일반적으로 프로그램에서 처리하지 않고 JVM에게 위임됨. • Exception 클래스는 많은 예외 클래스를 하위 클래스로 가지고 있음. • RuntimeException 클래스는 실행시간에 발생할 수 있는 예외와 관련된 하위 클래스들을 가지고 있는데 이런 예외들은 예외지정에 소요 되는 비용이 예외지정을 함으로써 얻는 효과에 비해 더 크기 때문에 일반적으로 프로그램에서 지정하지 않음.

  21. 자바 입출력 • 주요 예외 클래스 • 자바 컴파일러는 Error과 RuntimeException를 제외한 나머지 예외에 대해서는 프로그램에서 처리하도록 요구하는데 IOException을 던지는 메서드를 호출할 때 예외처리를 하지 않는다면 컴파일러는 에러를 발생 시켜 프로그래머에게 예외처리를 하도록 요구함.

  22. 자바 입출력 • 예외처리를 하지 않았을 때 발생하는 컴파일 에러 • 예외를 처리하는 방법 • throws 문을 사용하여 자신을 호출한 메서드에게 위임하는 방법 • throws는 처리해야 하는 모든 예외를 하나의 메서드에서 처리하게 할 때 유용 • 사용법 • 메서드가 여러 가지의 예외를 처리해야 할 때는 ,(컴마)를 사용하여 처리해야하는 모든 예외 클래스를 나열함.

  23. 자바 입출력 • try-catch문을 사용하여 처리하는 방법 • try-catch문을 사용하여 예외를 처리하는 형식 • 각 예외에 대한 catch문을 추가하여 하나의 try-catch문이 여러 가지 예외에 대해서 처리할 수 있음. • 주의 할 것은 catch문이 순차적으로 실행되기 때문에 가장 하위에 있는 Exception 클래스가 앞에 와야 한다는 것임. • finally 문은 선택적으로 사용되는 문장으로서 예외의 발생 여부에 상관없이 수행되어야 하는 문장을 정의함.

  24. 자바 입출력 • 예제 import java.io.*; public class ExceptionExam { // 메소드 내부에서 IOException이 발생하면 메서드내에서 try catch문을 사용해 처리하지 않고 // run() 메서드를 호출한 메서드에게 예외처리의 책임을 맞긴다. public void run() throws IOException { FileReader fr = new FileReader(new File("c:\\test\\file.txt")); BufferedReader br = new BufferedReader(fr); OutputStreamWriter osw = new OutputStreamWriter(System.out); String line = null; br.close(); // 예외를 발생시키기 위해 객체 br을 close() 메서드를 호출해 닫는다 while((line=br.readLine())!= null) { // readLine() 메서드를 호출하며 IOException이 발생 osw.write(line+"\n"); osw.flush(); } osw.close(); fr.close(); } public static void main(String args[]) { try { // 예외가 발생하는 코드를 try문 안에 위치 ExceptionExam exception = new ExceptionExam(); exception.run(); }catch(Exception e) { // run() 메서드가 발생시키는 IOException을 처리 // 예외클래스들의 상위 클래스인 Exception 클래스의 printStackTrace() 메서드를 호출해 예외에 대한 정보를 출력 e.printStackTrace(); System.out.println("예외가 발생해 프로그램을 종료합니다."); System.exit(0); } } }

  25. 자바 입출력 • 실행결과

  26. 자바 입출력 • final 수정자 • final 수정자는 “한번 결정된 것은 마지막“이라는 의미를 가지고 있음. • final 수정자의 의미 • 클래스에 사용되었을 때는 보안등의 이유로 이 클래스가 더 이상 상속될 수 없는 마지막 클래스임을 의미함. • 메서드에 사용되었을 때는 클래스와 비슷하다. 메서드에 사용되었을 때는 더 이상 이 메서드가 오버라이딩 될 수 없다는 것을 의미한다. 보안등의 이유로 상속받는 모든 클래스가 같은 기능을 가져야 할 때 사용함. • 멤버 변수나 로컬 변수에 사용되었을 때는 이 변수는 상수와 같이 사용됨. 변수에 final 수정자를 사용할 때는 변수를 선언할 때 값을 설정해주어야 한다는 것을 주의해야 한다.

  27. 자바 입출력 • 예제 • 실행결과 class FinalExam { // 클래스 외부에서 바로 접근할 수 있는 멤버를 final로 설정하면 클래스 외부에서 값을 변경할 수 없다. public static final String className = "FinalExam"; private final int MAX_SIZE = 10; // MAX_SIZE는 final로 설정되어있으므로 int형 상수 private int[] array = new int[MAX_SIZE]; //final로 선언된 메서드인 getArraySize()는 FinalExam을 상속받은 FinalClassExam 클래스에서 오버라이딩 할 수 없다. public final int getArraySize() { return array.length; } } // FinalClassExam 클래스를 상속받는 클래스를 구현할 수 없다. public final class FinalClassExam extends FinalExam { public static void main(String args[]) { FinalExam finalExam = new FinalClassExam(); // String형 상수 className를 static로 선언하였기 때문에 FinalExam 클래스의 인스턴스를 생성하지 않고 접근할 수 있다 System.out.println("클래스 이름 : " + FinalExam.className); System.out.println("배열의 크기 : " + finalExam.getArraySize()); } }

More Related