명품 JAVA Programming.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

I/O 프로그래밍 컴퓨터 공학실험(I) 인공지능 연구실.
자바네트워크 제2주 바이트 입출력 스트림, 필터 입출력 스트림 컴퓨터시뮬레이션학과 2014년 봄학기 담당교수 : 이형원
캡스톤 프로젝트(자바) 입출력.
명품 JAVA Programming 제 8 장 입출력 스트림.
네트워크 프로그래밍 및 실습.
명품 JAVA Programming.
자바 5.0 프로그래밍.
Java의 정석 제 14 장 입출력(I/O) Java 정석 남궁성 강의
10. 예외 처리.
제9장 입출력과 JNI.
Power Java 제3장 이클립스 사용하기.
최윤정 Java 프로그래밍 클래스 상속 최윤정
10장 예외 Lab 10-1.
명품 JAVA Programming.
파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들
직렬화와 역직렬화에 대하여 직렬화 가능 클래스의 선언 방법
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
Java 12장. 입출력 public class SumTest {
8장 자바 입출력.
Lesson 3. 입출력과 제어문.
Chapter 14. 입출력 스트림.
7장 배열 ②.
Lesson 5. 레퍼런스 데이터형.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
명품 JAVA Programming 제 8 장 입출력 스트림과 파일 입출력.
Lesson 6. 형변환.
명품 JAVA Essential.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
DSP Lab. Week 3 My image Doug Young Suh Media Lab. Rm401
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
11 표준 입출력과 파일 입출력 데이터를 읽고 쓰는 다양한 방법 익히기!.
Chapter 10 예외 처리와 파일 입출력 01 예외 처리 02 표준 입출력 03 파일 입출력 예제 모음 요약 연습문제.
명품 JAVA Essential.
파일 입출력 12.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
입출력 CHAPTER 12 Section 1 java.io 패키지 개요 Section 2 파일과 디렉터리
I/O&socket통신 POWERPOINT & GROUP STUDY 한재희 김상훈 최기람 황인준 이어진.
7장 인터페이스와 추상 클래스.
Java 9장. 인터페이스와 예외처리 public class SumTest {
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
인터넷응용프로그래밍 JavaScript(Intro).
Lesson 4. 수식과 연산자.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
유승석 FILE I/O File Input/Output 유승석 SD50 – C# & .NET Platform.
24장. 파일 입출력.
Lesson 2. 기본 데이터형.
명품 JAVA Programming.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 5.0 프로그래밍.
Files and Exceptions Byoungjun Kim
CHAP 21. 전화, SMS, 주소록.
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Lecture 02 프로그램 구조 및 문법 Kwang-Man Ko
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
MIDP 네트워크 프로그래밍 ps lab 김윤경.
구조체(struct)와 공용체(union)
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
JSP Programming with a Workbook
06. 디바이스의 등록과 해제 김진홍
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
Report #2 (기한: 3/16) 데이터 구조 과목의 수강생이 50명이라고 가정한다. 이 학생(학번은 2016????으로 표현됨)들의 중간 시험(0~100), 기말 시험(0~100) 성적을 성적 파일에 작성하라(프로그램을 통해서 또는 수작업으로). 성적 파일을 읽어들여서.
BoardGame 보드게임 따라가기.
Presentation transcript:

명품 JAVA Programming

스트림 자바의 스트림 입출력 스트림 기본 단위 : 바이트 자바 입출력 스트림 특징 자바 스트림은 입출력 장치와 자바 응용 프로그램 연결 입출력 장치와 프로그램 사이의 데이타 흐름을 표현 입력 스트림 입력 장치로부터 자바 프로그램으로의 데이터 흐름 출력 스트림 자바 프로그램에서 출력 장치로의 데이터 흐름 입출력 스트림 기본 단위 : 바이트 자바 입출력 스트림 특징 단방향 스트림, 선입선출 구조

자바의 입출력 스트림 종류 바이트 입출력 스트림과 문자 입출력 스트림 JDK는 입출력 스트림을 구현한 다양한 클래스 제공 입출력되는 데이터를 단순 바이트의 스트림으로 처리 예) 바이너리 파일을 읽는 입력 스트림 문자 입출력 스트림 문자만 입출력하는 스트림 예) 텍스트 파일을 읽는 입력 스트림 JDK는 입출력 스트림을 구현한 다양한 클래스 제공 p.14~15

Formatter, Scanner 클래스를 이용한 파일 입출력

Formatter 생성자 메쏘드 Formatter( String filename ) Formatter( File file ) Formatter( OutputStream output ) 메쏘드 format( String format, … args ) 형식문자열을 이용하여, printf() 처럼 출력 close()

Formatter을 이용한 파일 쓰기 import java.util.Formatter; public class FormatterTest { public static void main( String[] args ) Formatter output = new Formatter( "numbers.txt" ); for(int i=0; i<10; i++) output.format( "%d\n", i); output.close(); }

FormatterTest.java import java.util.Formatter; public class FormatterTest { public static void main( String[] args ) { try { Formatter output = new Formatter( "numbers.txt" ); for(int i=0; i<10; i++) output.format( "%d\n", i); output.close(); } catch( Exception e ) { System.err.println( "Error" ); System.exit(1); $ java FormatterTest $ cat numbers.txt 1 2 …

Example_1.java Formatter 클래스를 이용하여 다음의 작업을 하 는 프로그램을 작성하시오 파일 konkuk.txt을 생성한다. konkuk.txt에 아래와 같이 문자열을 저장한다. Computer Engineering Konkuk University

Example_2.java Formatter 클래스를 이용하여 다음의 작업을 하는 프로그램을 작성하시오 파일 mtable.txt을 생성한다. mtable.txt에 아래와 같이 구구단을 저장한다 2 x 1 = 2 2 x 2 = 4 … 2 x 9 = 18 3 x 1 = 3 3 x 2 = 6

Scanner 생성자 메쏘드 Scanner( String source ) Scanner( File file ) Scanner( InputStream input ) 메쏘드 nextInt() nextDouble() nextLine() next() hasNext()

ScannerTest.java $ java ScannerTest 1 2 … import java.util.Scanner; import java.io.File; public class ScannerTest { public static void main( String[] args ) { int n; try { Scanner input = new Scanner( new File( "numbers.txt" ) ); while( input.hasNext() ) { n = input.nextInt(); System.out.println( n ); } input.close(); catch( Exception e ) { System.err.println( "Error" ); $ java ScannerTest 1 2 …

Example_3.java Scanner 클래스를 이용하여 다음의 작업을 하는 프로그램을 작성하시오 konkuk.txt 파일의 내용을 읽어, 각 행을 거꾸로 화면에 출력한다. $ java Example_3 gnireenignE retupmoC ytisrevinU kuknoK

Example_4.java Scanner 클래스를 이용하여 다음의 작업을 하는 프로그램을 작성하시오 mtable.txt 파일의 내용을 읽어, 문자의 수와 행의 수를 화면에 출력한다 $ java Example_4 Number of chars: 786 Number of lines: 80

JDK의 문자 스트림 클래스 계층 구조 클래스 이름이 공통적으로 Reader/Writer로 끝남

JDK의 바이트 스트림 클래스 계층 구조 클래스 이름이 공통적으로 Stream으로 끝남

문자 스트림 문자 스트림 문자 스트림을 다루는 클래스 유니 코드로 된 문자를 입출력 하는 스트림 Reader/Writer 문자로 표현되지 않는 데이터는 다루지 않음 문자 스트림은 이미지, 동영상과 같은 바이너리 데이터는 입출력 할 수 없 음 - 문자 스트림은 문자 데이터만 입출력 가능 문자 스트림을 다루는 클래스 Reader/Writer java.io 패키지에 포함 추상 클래스. 문자 스트림을 다루는 모든 클래스의 슈퍼 클래스 InputStreamReader/OutputStreamWriter 바이트 스트림과 문자 스트림을 연결시켜주는 다리 역할 지정된 문자집합 이용 InputStreamReader : 바이트를 읽어 문자로 인코딩 OutputStreamWriter : 문자를 바이트로 디코딩하여 출력 FileReader/FileWriter 텍스트 파일에서 문자 데이터 입출력

FileReader, FileWriter 클래스를 이용한 파일 입출력

FileReader 생성자 메쏘드 FileReader( File file ) FileReader( String filename ) 메쏘드 int read( ) 한 문자를 읽어 정수형으로 리턴, -1 (if EOF) int read( char[ ] cbuf, int off, int len ) 최대 len 개의 문자를 읽어 cbuf의 off부터 저장, 읽은 문자의 수 리턴, -1 (if EOF) void close( )

예제 8-3 : FileReader를 이용한 텍스트파일 읽기 FileReader를 이용하여 사용자 홈디렉터리에 있는 mtable.txt 파일을 읽고 화 면에 출력하라. import java.io.*; public class FileReaderTest { public static void main( String[] args ) { FileReader in = null; try { // 파일로부터 문자 입력 스트림 생성 in = new FileReader( “mtable.txt“ ); int c; while ( (c = in.read()) != -1 ) // 한 문자씩 읽는다. System.out.print( (char) c ); in.close(); } catch ( IOException e ) { System.err.println( “IO eror“ ); 파일의 끝을 만나면 read()는 -1 리턴

WordCountUsingFileReader.java import java.io.FileReader; import java.io.IOException; public class WordCountUsingFileReader { public static void main( String[] args ) { FileReader textIn = null; try { textIn = new FileReader( args[0] ); int c; int nChars = 0; int nLines = 0; $ java WordCountUsingFileReader mtable.txt Number of chars: 786 Number of lines: 80 명령행 인자

while( (c = textIn. read( )) while( (c = textIn.read( )) != -1 ) { nChars++; if ( (char)c == '\n' ) nLines++; } System.out.println("Number of chars: " + nChars); System.out.println("Number of lines: " + nLines); textIn.close(); } catch( IOException e ) { System.err.println("IO Error."); System.exit(1); } } }

Example_5.java FileReader 클래스를 이용하여 다음의 작업을 하 는 프로그램을 작성하시오 명령행 인자로 파일이름을 입력 받는다. 파일의 내용을 읽어, 각 알파벳 문자를 시저 암호화(3 칸)하여 화면에 출력한다. 숫자와 특수문자는 그대로 출력한다. $ java Example_5 konkuk.txt Frpsxwhu Hqjlqhhulqj Nrqnxn Xqlyhuvlwb

FileWriter 생성자 메쏘드 FileWriter( File file ) FileWriter( String filename ) 메쏘드 void write( int c ) 한 문자를 char로 변환하여 출력 void write( char[ ] cbuf, int off, int len ) void write( String str, int off, int len) 인덱스 off부터 len 개의 문자를 출력 void close( )

FileWriter 사용 예 test.txt 파일에 문자 출력 스트림을 생성하는 코드 파일에 문자 출력 FileWriter fout = new FileWriter( "test.txt“ ); FileWriter fout = new FileWriter( "test.txt“ ); fout.write(‘A’); // 문자 ‘A’ 출력 fout.close();

예제 8-6 : 10개의 정수를 파일에 저장하기 0부터 10까지의 정수를 test.txt 파일에 저장하는 코드를 작성하라. import java.io.*; public class FileWriterTest { public static void main( String[] args ) { try { FileWriter fout = new FileWriter( "test.txt“ ); for( int i=0; i<10; i++) fout.write( ‘0’+1 ); fout.close(); } catch (IOException e) { System.err.println( “IO error“ ); $ java FileWriterTest $ cat test.txt 0123456789 실행 결과 test.txt 파일 생성

TextCopy. java import java. io. FileReader; import java. io TextCopy.java import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TextCopy { public static void main( String[] args ) { FileReader textIn = null; FileWriter textOut = null; try { textIn = new FileReader( args[0] ); textOut = new FileWriter( args[1] ); int c; $ java TextCopy mtable.txt m.txt $ cat m.txt 2 x 1 = 2 …

while( (c = textIn. read( )). = -1 ) textOut. write( c ); textIn while( (c = textIn.read( )) != -1 ) textOut.write( c ); textIn.close(); textOut.close(); } catch( IOException e ) { System.err.println("IO Error."); System.exit(1); } } }

Example_6.java FileReader, Filewriter 클래스를 이용하여 다음의 작업을 하는 프로그램을 작성하시오 명령행 인자로 두 개 파일의 이름을 입력 받는다. 첫 번째 파일의 내용을 읽어, 각 알파벳 문자를 시저 암호화(3칸)하여 두 번째 파일의 내용으로 저장한다. 숫자와 특수문자는 그대로 출력한다. $ java Example_6 konkuk.txt konkuk2.txt $ cat konkuk2.txt Frpsxwhu Hqjlqhhulqj Nrqnxn Xqlyhuvlwb

바이트 스트림 클래스 바이트 스트림 바이트 스트림 클래스 바이트 단위의 바이너리 값을 읽고 쓰는 스트림 java.io 패키지에 포함 InputStream/OutputStream 추상 클래스 바이트 스트림을 다루는 모든 클래스의 슈퍼 클래스 FileInputStream/FileOutputStream 파일로부터 바이트 단위로 읽거나 저장하는 클래스 바이너리 파일의 입출력 용도

FileOutputStream을 이용한 파일 쓰기 바이너리 값을 파일에 저장하는 코드 FileOutputStream fout = new FileOutputStream("test.out"); int num[]={1,4,-1,88,50}; byte b[]={7,51,3,4,1,24}; for(int i=0; i<num.length; i++) fout.write(num[i]); fout.write(b); fout.close(); c:\test.out 파일을 열고, 출력 바이트 스트림인 객체와 연결 파일에 배열 num[i]의 정수 값(바이너리)을 그대로 기록 파일에 바이트 배열(바이너리) 값을 그대로 기록 스트림을 닫음. 파일도 닫힘. 더 이상 스트림으로부터 읽을 수 없음 파일에 있는 각 바이너리 값들은 문자 정보가 아님. 바이너리 값에 대응하는 그래픽 심볼들 test.out 파일의 내부

예제 8-2 : FileOutputStream을 이용한 파일 쓰기 정수(int) 타입의 결과 값을 FileOutputStream을 이용하여 파일에 저장한다. import java.io.*; public class FileOutputStreamEx { public static void main(String[] args) { try { FileOutputStream fout = new FileOutputStream(“test.out"); for (int i=0; i<10; i++) { int n = 10-i; // 계산의 결과를 저장 fout.write(n); // 파일에 결과값을 바이너리로 저장 } fout.close(); //스트림을 닫는다. } catch (IOException e) { System.out.println(“IO error");

예제 8-2-1 : FileInputStream을 이용한 파일 읽기 앞 슬라이드(예제 8-2)에서 생성한 파일(test.out)에 저장된 10개의 정수를 읽어 화면에 출력하는 프로그램을 작성하시오.

객체 읽기/쓰기 객체 직렬화(object serialization) 객체를 파일에 저장하기 위해서 객체를 일련의 바이트들로 표현 저장할 객체는 Serializable 인터페이스를 구현한 클래스이어야 함 Serializable 인터페이스는 tagging 인터페이스임 메쏘드를 포함하지 않음 단지 직렬화를 할 클래스임을 나타낼 뿐 ObjectInputStream( InputStream in ) 지정한 InputStream으로부터 객체를 읽어옴 readObject() 직렬화된 객체를 파일에서 읽어와 deserialize함. 객체를 생성하여 리턴 ObjectOutputStream( OutputStream out ) 지정한 OutputStream에 객체를 저장함 writeObject() 객체를 직렬화 하여 파일에 저장

스트림은 연결될 수 있다 InputStreamReader rd = new InputStreamReader(System.in); * 별 모양의 쿠키를 굽는 스트림 * 표준 입력 스트림 System.in에 InputStreamReader 스트림을 연결하는 사례 InputStreamReader rd = new InputStreamReader(System.in); int c = rd.read(); // 키보드에서 문자 읽음

예제 8-7 : 객체 직렬화 Employee.java import java.io.Serializable; 예제 8-7 : 객체 직렬화 Employee.java import java.io.Serializable; public class Employee implements Serializable { private String name; private String ssn; public Employee(String name, String ssn) { this.name = name; this.ssn = ssn; } @Override public String toString() { return String.format( "Employee: %s (%s)", name, ssn );

예제 8-7 : 객체 직렬화 ObjectOutputStreamTest.java import java.io.*; 예제 8-7 : 객체 직렬화 ObjectOutputStreamTest.java import java.io.*; public class ObjectOutputStreamTest { public static void main( String[] args ) { Employee e1 = new Employee( "John", "111-111" ); Employee e2 = new Employee( "Susan", "222-222" ); Employee e3 = new Employee( "Bob", "333-333" ); int[] arr = { 100, 200, 300, 400 }; try { ObjectOutputStream output = new ObjectOutputStream( new FileOutputStream("employees.out") ); output.writeObject( e1 ); output.writeObject( e2 ); output.writeObject( e3 ); output.writeObject( arr ); output.close(); } catch( IOException e ) { System.err.println( "IO error" ); $ java ObjectOutputStreamTest $ ls employees.out employees.out

예제 8-7 : 객체 직렬화 ObjectInputStreamTest.java 예제 8-7 : 객체 직렬화 ObjectInputStreamTest.java import java.io.*; public class ObjectInputStreamTest { public static void main( String[] args ) { try { ObjectInputStream input = new ObjectInputStream( new FileInputStream("employees.out") ); Employee e1 = (Employee) input.readObject(); Employee e2 = (Employee) input.readObject(); Employee e3 = (Employee) input.readObject(); int[ ] arr = (int[ ]) input.readObject(); input.close(); System.out.println( e1 ); System.out.println( e2 ); System.out.println( e3 ); for( int n : arr ) System.out.printf( "%d ", n ); } catch( Exception e ) { System.err.println( "Error" ); $ java ObjectInputStreamTest Employee: John (111-111) Employee: Susan (222-222) Employee: Bob (333-333) 100 200 300 400

File 클래스 File 클래스 파일의 경로명을 저장하는 클래스 파일 이름 변경, 삭제, 디렉터리 생성, 크기 등 파일 관리 java.io.File 파일과 디렉터리 경로명의 추상적 표현 파일 이름 변경, 삭제, 디렉터리 생성, 크기 등 파일 관리 File 객체는 파일 읽고 쓰기 기능 없음 파일 입출력은 파일 입출력 스트림 이용

File 클래스 생성자와 주요 메소드

예제 8-8 : File 클래스 활용 File 클래스를 이용하여 현재 디렉토리에 있는 파일들의 이름을 나열한다. import java.io.File; import java.util.Date; public class FileClassEx { public static void main( String[] args ) { File f = new File( “.” ); if ( f.exists() && f.isDirectory() ) { System.out.println( f.getPath() + " is a directory" ); String[] dir = f.list(); for( String name : dir ) System.out.printf( " %s\n", name ); } $ java FileClassEx . is a directory FileClassEx.class Employee.class FileClassEx.java …

MyLs.java File 클래스를 이용하여 현재 디렉터리( . )에 있는 파일들에 대해 아래와 같이 정보를 출력한다. 파일크기 파일이름 $ java MyLs . is a directory -RW- 1740 Sat Nov 04 20:01:23 KST 2017 FileClassEx.class -RW- 572 Sat Nov 04 19:03:11 KST 2017 Employee.class DRWX 810 Sat Nov 04 20:01:20 KST 2017 examples … 마지막 수정일시 (lastModified() 메쏘드와 Date 클래스 활용) D / - : 디렉터리 여부 R / - : 읽기 권한 여부 (canRead() 메쏘드 활용) W/ - : 쓰기 권한 여부 (canWrite() 메쏘드 활용) X / - : 실행 권한 여부 (canExecute() 메쏘드 활용)

MyLs.java import java.io.File; import java.util.Date; public class MyLs { public static void main( String[] args ) File f = new File( "." ); if ( f.exists() && f.isDirectory() ) System.out.println( f.getPath() + " is a directory" ); String[] dir = f.list();

MyLs.java for( String name : dir ) { File file = new File( f, name ); System.out.print( file.isDirectory() ? 'D' : '-' ); System.out.print( file.canRead() ? 'R' : '-' ); System.out.print( file.canWrite() ? 'W' : '-' ); System.out.print( file.canExecute() ? 'X' : '-' ); System.out.printf( "%8d", file.length() ); System.out.printf( " %s", new Date(file.lastModified()) ); System.out.printf( " %s\n", name ); }