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

Similar documents
PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

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

PowerPoint 프레젠테이션

Network Programming

제11장 자바 입출력

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

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

Microsoft PowerPoint - java2-lab2-DirectoryImageConverter.pptx

설계란 무엇인가?

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

PowerPoint Presentation

PowerPoint Presentation

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

Microsoft PowerPoint - 03-TCP Programming.ppt

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

PowerPoint Presentation

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

자바입출력구조 자바입출력 파일 기본입출력 필터입출력 문자입출력 비순차접근파일 객체입출력 파일입출력 바이트배열입출력 파이프입출력 연결형입력 스트링버퍼입력 스트림 ( 순차접근 ) 자바입출력구조

4장.문장

Java

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 08.다형성

Cluster management software

Microsoft PowerPoint - 04-UDP Programming.ppt

12-file.key

PowerPoint 프레젠테이션

rmi_박준용_final.PDF

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - Java7.pptx

PowerPoint Presentation

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

PowerPoint 프레젠테이션

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

Java ...

<4D F736F F F696E74202D20B3D7C6AEBFF6C5A9C7C1B7CEB1D7B7A1B9D65F FBCD2C4CF5FC3A4C6C35FBFA1C4DA2E BC8A3C8A

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

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

쉽게

TEST BANK & SOLUTION

Design Issues

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


[ 정보 ] 과학고 R&E 결과보고서 Monte Carlo Method 를이용한 고교배정시뮬레이션 연구기간 : ~ 연구책임자 : 강대욱 ( 전남대전자컴퓨터공학부 ) 지도교사 : 최미경 ( 전남과학고정보 컴퓨터과 ) 참여학생 : 박진명 ( 전

PowerPoint Presentation

PowerPoint Presentation

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

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

Microsoft PowerPoint 웹 연동 기술.pptx

Cluster management software

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

슬라이드 1

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint Presentation

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

Microsoft PowerPoint - lec7_package [호환 모드]

java.lang 패키지 java.util 패키지 java.io 패키지 콜렉션 2

JAVA PROGRAMMING 실습 05. 객체의 활용

쉽게 풀어쓴 C 프로그래밊

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

슬라이드 1

JSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른

자바-11장N'1-502

Microsoft PowerPoint - C++ 5 .pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 2강

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

gnu-lee-oop-kor-lec10-1-chap10

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

The Pocket Guide to TCP/IP Sockets: C Version

ThisJava ..

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

제11장 프로세스와 쓰레드

문서의 제목 나눔고딕B, 54pt

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - [EEL2] Lab10.pptx

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

12 장파일입출력 파일입출력의기초파일열기, 사용하기, 닫기파일입출력모드문자단위파일입출력텍스트파일과이진파일 read, write 함수에의한이진파일입출력임의접근입출력스트림상태입출력연산자오버로딩과파일입출력 C++ 프로그래밍입문

PowerPoint 프레젠테이션

Microsoft PowerPoint - CSharp-10-예외처리

Network Programming

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - lec2.ppt

Transcription:

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

JDK 의문자스트림클래스계층구조 스트림은연결될수있다 * 별모양의쿠키를굽는스트림 * 표준입력스트림 System.in 에 InputStreamReader 스트림을연결하는사례 클래스이름이공통적으로 InputStreamReader rd = new InputStreamReader(System.in); Reader/Writer로끝남 6 int c = rd.read(); // 키보드에서문자읽음 바이트스트림클래스 바이트스트림 바이트단위의바이너리값을읽고쓰는스트림 바이트스트림클래스 java.io 패키지에포함 InputStream/OutputStream 추상클래스 바이트스트림을다루는모든클래스의슈퍼클래스 FileInputStream/FileOutputStream 파일로부터바이트단위로읽거나저장하는클래스 바이너리파일의입출력용도 DataInputStream/DataOutputStream 자바의기본데이터타입의값 ( 변수 ) 을바이너리값그대로입출력 문자열도바이너리형태로입출력 FileInputStream 을이용한파일읽기 파일전체를읽어화면에출력하는코드샘플 FileInputStream fin = new FileInputStream("c:\\test.txt"); while((c = fin.read())!= -1) { f C:\test.txt 파일을열고파일과입력바이트스트림객체 fin 연결 파일끝까지바이트씩 c 에읽어들임. 파일의끝을만나면 read() 는 -1 리턴 바이트 c 를문자로변환하여화면에출력 스트림을닫음. 파일도닫힘. 스트림과파일의연결을끊음. 더이상스트림으로부터읽을수없음

예제 : 윈도우에있는 system.ini 파일을읽어화면에출력하기 FileInputStream 을이용하여사용자컴퓨터의 windows 디렉터리에있는 system.ini 파일을읽고화면에출력하라. system.ini 파일은텍스트파일이다. public class FileInputStreamEx { FileInputStream in = null; in = new FileInputStream("c:\\windows\\system.ini"); 파일끝을만나면 -1 리턴 catch (IOException e) { System.out.println(" 입출력오류 "); ; for 16-bit app support [386Enh] woafont=dosapp.fon EGA80WOA.FON=EGA80WOA.FON EGA40WOA.FON=EGA40WOA.FON CGA80WOA.FON=CGA80WOA.FON CGA40WOA.FON=CGA40WOA.FON [drivers] wave=mmdrv.dll timer=timer.drv [mci] FileOutputStream 을이용한파일쓰기 바이너리값을파일에저장하는바이트스트림코드 FileOutputStream fout = new FileOutputStream("c:\\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] 의정수값 ( 바이너리 ) 을그대로기록 파일에바이트배열 ( 바이너리 ) 값을그대로기록 스트림을닫음. 파일도닫힘. 더이상스트림으로부터읽을수없음 FileOutputStream 을이용한파일쓰기 예제 : FileOutputStream 을이용한파일쓰기 test.out 파일의내부 파일에있는각바이너리값들은문자정보가아님. 바이너리값에대응하는그래픽심볼들 정수타입의결과값을 FileOutputStream을이용하여파일에저장한다. 다시이파일에서정수형변수로읽고이전에계산된결과값과같은지확인하라. import java.io.ioexception; public class FileOutputStreamEx { FileOutputStream fout = new FileOutputStream( c:\\test.out"); FileInputStream fin = null; for (int i=0; i<10; i++) { int n = 10-i; // 계산의결과를저장 fout.write(n); // 파일에결과값을바이너리로저장 fout.close(); // 스트림을닫는다.

예제 : FileOutputStream 을이용한파일쓰기 fin = new FileInputStream( c:\\test.out"); int c=0; while ((c = fin.read())!= -1) { System.out.print(c + " "); f catch (IOException e) { System.out.println(" 입출력오류 "); 10 9 8 7 6 5 4 3 2 1 문자스트림 문자스트림 유니코드로된문자를입출력하는스트림 문자로표현되지않는데이터는다루지않음 문자스트림은이미지, 동영상과같은바이너리데이터는입출력할수없음 - 문자스트림은문자데이터만입출력가능 문자스트림을다루는클래스 Reader/Writer java.io 패키지에포함 추상클래스. 문자스트림을다루는모든클래스의슈퍼클래스 InputStreamReader/OutputStreamWriter 바이트스트림과문자스트림을연결시켜주는다리역할 지정된문자집합이용 InputStreamReader : 바이트를읽어문자로인코딩 OutputStreamWriter : 문자를바이트로디코딩하여출력 FileReader/FileWriter 텍스트파일에서문자데이터입출력 예제 : FileReader 를이용한텍스트파일읽기 - system.ini 파일읽기 FileReader 를이용하여사용자컴퓨터의 windows 디렉터리에있는 system.ini 파일을읽고화면에출력하라. system.ini 파일은텍스트파일이다. public class FileReaderEx { FileReader in = null; // 파일로부터문자입력스트림생성 in = new FileReader("c:\\windows\\system.ini"); // 한문자씩읽는다. catch (IOException e) { System.out.println(" 입출력오류 "); 파일의끝을만나면 read() 는 -1 리턴 문자집합과 InputStreamReader 로텍스트파일읽기 FileInputStream fin = new FileInputStream("c:\\tmp\\hangul.txt"); InputStreamReader in = new InputStreamReader(fin, "MS949"); 10101101 fin FileInputStream 10101101 문자집합사용 ( 윈도우에서 MS949) in InputStreamReader 한글확장완성형문자집합 가, 나 in.read()

예제 : 한글텍스트파일읽기 InputStreamReader 를이용하여 MS949 문자집합으로한글텍스트파일을 읽고출력하라. public class FileReadHangulSuccess { InputStreamReader in = null; FileInputStream fin = null; fin = new FileInputStream("c:\\tmp\\hangul.txt"); in = new InputStreamReader(fin, "MS949"); hangul.txt MS 에서만든한글확장 완성형문자집합 System.out.println(" 인코딩문자집합은 " + in.getencoding()); 인코딩문자집합은 MS949 가나다라마바사아자차카타파하 f catch (IOException e) { System.out.println(" 입출력오류 "); 예제 : 문자집합지정이잘못된한글텍스트파일읽기 InputStreamReader 의문자집합을 US-ASCII 로지정하여한글파일을 읽고출력하라. public class FileReadHangulFail { InputStreamReader in = null; 문자집합지정이잘못된 FileInputStream fin = null; 경우의예를보이기위해일부러틀린문자집합지정 fin = new FileInputStream("c:\\tmp\\hangul.txt"); hangul.txt in = new InputStreamReader(fin, "US-ASCII"); System.out.println(" 인코딩문자집합은 " + in.getencoding()); 인코딩문자집합은 ASCII???????????????????????????? f catch (IOException e) { System.out.println(" 입출력오류 "); 문자집합지정이잘못되어읽은문자가제대로인식되지못함. 출력결과가깨짐 FileWriter 사용예 c:\test.txt 파일에문자출력스트림을생성하는코드 FileWriter fout = new FileWriter("c:\\tmp\\test.txt"); 파일에문자출력 FileWriter fout = new FileWriter("c:\\tmp\\test.txt"); fout.write( A ); // 문자 A 출력 fout.close(); 예제 : 키보드입력을파일로저장하기 키보드입력데이터를 c:\tmp\test.txt 파일에저장하는코드를작성하라. public class FileWriterEx { InputStreamReader in = new InputStreamReader(System.in); FileWriter fout = null; fout = new FileWriter("c:\\tmp\\test.txt"); fout.write(c); fout.close(); catch (IOException e) { System.out.println(" 입출력오류 ");

예제 : 키보드입력을파일로저장하기 abcdef 입력후 <Enter> 키와 ctrl-z 키입력 버퍼입출력스트림과버퍼입출력의특징 버퍼스트림 버퍼를가진스트림 입출력데이터를일시적으로저장하는버퍼를이용하여입출력효율개선 버퍼입출력의목적 입출력시운영체제의 API 호출횟수를줄여입출력성능개선 출력시여러번출력되는데이터를버퍼에모아두고한번에장치로출력 입력시입력데이터를버퍼에모아두고한번에프로그램에게전달 실행결과 test.txt 파일생성 버퍼스트림의종류 바이트버퍼스트림 바이트단위의바이너리데이터를처리하는버퍼스트림 BufferedInputStream와 BufferedOutputStream 문자버퍼스트림 유니코드의문자데이터만처리하는버퍼스트림 BufferedReader와 BufferedWriter 20 바이트버퍼를가진 BufferedOutputStream BufferedOutputStream bout = new BufferedOutputStream(System.out, 20); FileReader fin = new FileReader("c:\\windows\\system.ini"); while ((c = fin.read())!= -1) { bout.write((char)c); f bout.close(); 스트림닫음 파일전체를읽어화면에출력 20 바이트크기의버퍼설정. System.out 표준스트림에출력

예제 : 버퍼스트림을이용하는출력예제 10101101 20 바이트버퍼 fin in.read() ; f o r ; f o r FileReader int c... bout System.out 10101101 BufferedOutputStram OutputStream ; f o r ; for 16-bit app support [386Enh] woafont=dosapp.fon EGA80WOA.FON=EGA80WOA.FON EGA40WOA.FON=EGA40WOA.FON CGA80WOA.FON=CGA80WOA.FON CGA40WOA.FON=CGA40WOA.FON 버퍼크기를 5로하고, 표준출력스트림과연결된버퍼출력스트림을생성하라. 키보드에서입력받은문자를출력스트림에출력하고, 입력의끝을알리면 (ctrl-z) 버퍼에남아있는모든문자를출력하는프로그램을작성하라. public class BufferedIOEx { InputStreamReader in = new InputStreamReader(System.in); BufferedOutputStream out = new BufferedOutputStream(System.out, 5); ctrl-z가입력될때까지반복 while ((c = in.read())!= -1) out.write(c); 버퍼가다찰때문자가화면에출력 out.flush(); // 버퍼에남아있던문자출력 if (in!= null) { out.close(); catch (IOException e) { System.out.println(" 입출력오류 "); 예제 : 버퍼스트림을이용하는출력예제 <Enter> 키를입력했을때버퍼에저장된 12345 까지만출력. 버퍼가비게되고다시 678 이버퍼에저장됨 File 클래스 File 클래스 파일의경로명을다루는클래스 java.io.file 파일과디렉터리경로명의추상적표현 파일이름변경, 삭제, 디렉터리생성, 크기등파일관리 File 객체는파일읽고쓰기기능없음 파일입출력은파일입출력스트림이용 ctrl-z 키를입력했을때버퍼에남아있던 678 모두출력

File 클래스생성자와주요메소드 File 클래스사용예 29 파일객체생성 파일인지디렉터리인지구분 서브디렉터리리스트얻기 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()); 예제 : File 클래스활용한파일관리 File 클래스를이용하여파일의타입을알아내고, 디렉터리에있는파일들을나열하며, 디렉터리이름을변경하는프로그램을작성해보자. import java.io.file; public class FileClassExample { // 디렉터리에포함된파일과디렉터리의이름, // 크기, 수정시간을출력하는메소드 public static void dir(file fd) { // 디렉터리에포함된파일리스트얻기 String[] filenames = fd.list(); for (String s : filenames) { File f = new File(fd, s); long t = f.lastmodified(); // 마지막으로수정된시간 System.out.print(s); System.out.print("\t 파일크기 : " + f.length()); // 파일크기 System.out.printf("\t 수정한시간 : %tb %td %ta %tt\n",t, t, t, t); 예제 : File 클래스활용한파일관리 File f1 = new File("c:\\windows\\system.ini"); File f2 = new File("c:\\tmp\\java_sample"); File f3 = new File("c:\\tmp"); String res; if(f1.isfile()) // 파일타입이면 res = " 파일 "; else // 디렉터리타입이면 res = " 디렉터리 "; System.out.println(f1.getPath() + " 은 " + res + " 입니다."); if (!f2.exists()) { //f2 가나타내는파일이존재하는지검사 if (!f2.mkdir()) // 존재하지않으면디렉터리생성 System.out.println(" 디렉터리생성실패 ");

예제 : File 클래스활용한파일관리 if(f2.isfile()) // 파일타입이면 res = " 파일 "; else // 디렉터리타입이면 res = " 디렉터리 "; System.out.println(f2.getPath() + " 은 " + res + " 입니다."); dir(f3); // c:\tmp 에있는파일과디렉터리화면에출력 // 파일이름변경 f2.renameto(new File("c:\\tmp\\javasample")); dir(f3); C:\tmp 의파일과디렉터리리스트 c:\windows\system.ini 은파일입니다. c:\tmp\java_sample 은디렉터리입니다. hangul.txt 파일크기 : 28 수정한시간 : 11 월 29 일 21:04:46 Hello.java 파일크기 : 469 수정한시간 : 10 월 06 수 13:23:59 Hello2010.java 파일크기 : 126 수정한시간 : 10 월 06 수 10:01:56 HelloDoc.java 파일크기 : 669 수정한시간 : 10 월 06 수 14:23:32 java_sample 파일크기 : 0 수정한시간 : 11 월 14 일 16:46:27 hangul.txt 파일크기 : 28 수정한시간 : 11 월 29 일 21:04:46 Hello.java 파일크기 : 469 수정한시간 : 10 월 06 수 13:23:59 Hello2010.java 파일크기 : 126 수정한시간 : 10 월 06 수 10:01:56 HelloDoc.java 파일크기 : 669 수정한시간 : 10 월 06 수 14:23:32 javasample 파일크기 : 0 수정한시간 : 11 월 14 일 16:46:27 예제 : 텍스트파일복사 문자스트림을이용하여텍스트파일을복사하는프로그램을작성하라 public class TextCopy { public static void main(string[] args){ File src = new File("c:\\windows\\system.ini"); // 소스파일 File dst = new File("c:\\tmp\\system.txt"); // 목적파일 FileReader fr = null; FileWriter fw = null; BufferedReader in = null; BufferedWriter out = null; 예제 : 텍스트파일복사 fr = new FileReader(src); fw = new FileWriter(dst); in = new BufferedReader(fr); out = new BufferedWriter(fw); out.write((char)c); out.close(); fr.close(); fw.close(); catch (IOException e) { System.out.println(" 파일복사오류 "); 예제 : 텍스트파일복사 예제실행

예제 : 바이너리파일복사 바이트스트림을이용하여바이너리파일을복사하는프로그램을작성하라 public class BinaryCopy { File src = new File("c:\\windows\\explorer.exe"); // 소스파일 File dst = new File("c:\\tmp\\explorer.bin"); // 목적파일 FileInputStream fi = null; FileOutputStream fo = null; BufferedInputStream in = null; BufferedOutputStream out = null; 예제 : 바이너리파일복사 fi = new FileInputStream(src); fo = new FileOutputStream(dst); in = new BufferedInputStream(fi); out = new BufferedOutputStream(fo); out.write((char)c); out.close(); fi.close(); fo.close(); catch (IOException e) { System.out.println(" 파일복사오류 "); 예제 : 바이너리파일복사 예제실행 explorer.exe 와파일크기동일