java #28 IO Stream -입력-
* IO Stream
- JVM 외부에 있는 데이터를 읽어들이거나 JVM이 목적지로 연결하는 것.
- 단방향 stream(입력과 출력을 동시에 할수 있는 Stream 없다.)
입력의 근원 (InputStream) | 출력의 목적지 | |||
1. 시스템(키보드) 3. 네트워크 |
| 버퍼 |
- java.io package의 Stream 관련 클래스들
bit | 8bit Stream (byte 기반 Stram) | 8bit Stream (byte 기반 Stram) | 16bit Stream (문자열 기반 Stream) | 16bit Stream (문자열 기반 Stream) |
역할 | 읽기 | 쓰기 | 읽기 | 쓰기 |
상위 스트림 | InputStream | Outputstream | Reader | Writer |
스트림 | FileInputStream | FileOutputStream | FileReader | FileWriter |
스트림 | ObjectInputStream | ObjectOutputStream | BufferedReader | BufferedWriter |
스트림 | BufferedDataInputStream | DataOutputStream |
* Stream의 연결(입력)
8bit + 8bit
8bit + 16bt = 16bit
- 16bit의 관이 넓지만 8bit가 빠르다. 호스의 유속과 마찬가지.
- 8bit는 한글이 깨진다.
형식 | 키보드로부터 입력받기 | 파일로부터 입력받기 | |||||||||||||||||||||||
설명 | 키보드->마더보드의 키보드버퍼->OS->JVM (OS에 관을 꽂아두고 있어서 키보드 버퍼의 내용을 빼앗아간다. System.In.InputStream) 2바이트의 한글을 1바이트의 공간에 넣을때는 %??%?? 형식으로 두개로 나눠서 저장함. | 8비트 : FileInputStream 16비트 : FileReader * 파일의 정보 얻기 - File class 사용
| |||||||||||||||||||||||
객체화 및 사용 |
|
| |||||||||||||||||||||||
예제 |
|
|
* 파일읽기
- 8bit, 8bit+16bit 결합, 16bit 3가지 방법이 있다.
1. 8bit
대상 파일에 관계없이 읽어낼 수 있다.
가. 객체화
1 | FileInputStream fis = new FileInputStream(); | cs |
나. 사용
1 2 3 4 5 | int data = 0; while ((data = fis.read()) != -1) { System.out.print((char) data); } | cs |
다. 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public void octalStream() throws IOException { File file = new File("c:/dev/temp/Penguins.jpg"); if (file.exists()) { FileInputStream fis = new FileInputStream(file); // System.out.println(fis.read()); int data = 0; // 파일의 내용을 읽어 낼수 없다면 -1이 나온다. while ((data = fis.read()) != -1) { System.out.print((char) data); }// end while // 모든 작업이 끝나면 파일과 연결된 스트림 끊기 } else { System.out.println(file.getAbsolutePath() + "파일의 경로를 확인하세요 "); } } public static void main(String[] args) { UseFileRead ufr = new UseFileRead(); try { // ufr.octalStream(); //8bit 스트림만 사용한 경우 // ufr.Combine(); // 8bit와 16bit stream의 결합 ufr.hexStream(); } catch (IOException e) { e.printStackTrace(); } } } | cs |
2. 8bit & 16bit결합
c:\dev\a.txt → | F.I.S → | I.S.R → | B.R → | JVM-class |
가. 객체화
1 2 3 4 | File f=new File("path"); FileInputStream fis = new FileInputStream(f); InputStreamReader isr = new InputStreamReader(fis); BufferedReader bg=new BufferedReader(isr); | cs |
※ 아래와 같이 한줄로 객체화 할 수 있음.
1 | BufferedReader br=new BufferedReader(new InputStreamReader(new FileReader(f))); |
나. 사용
1 2 3 4 | String s=""; while (s=br.readLine())!=null){ // readLine은 \n까지 읽는다. s.o.p(s); } | cs |
다. 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** * 8bit와 16bit 스트림의 복합 사용 */ public void Combine() throws IOException { File file = new File("c:/dev/temp/java_read.txt"); if (file.exists()) { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String data = ""; while ((data = br.readLine()) != null) { System.out.println(data); }// end whlie br.close(); } else { System.out.println(file.getAbsolutePath() + "파일이 존재하지 않습니다."); } }// combine | cs |
가. 객체화
1 2 3 | File f = new File("path"); File Reader fr=new FileReader(f); BufferedReader br = new BufferedReader(fr); | cs |
※ 아래와 같이 한줄로 객체화 할 수 있음.
1 | BufferedReader br=new BufferedReader(new FileReader(f)); | cs |
1 2 3 4 5 | String temp=""; while((temp=br.readline())!=null){ s.o.p(temp); } | cs |
다. 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public void hexStream() throws IOException { File file = new File("c:/dev/temp/java_read.txt"); if (!file.exists()) { // 파일이 없을 때 System.out.println(file.getName() + "파일의 경로를 확인하세요"); } else { // 파일이 있을 때 BufferedReader br = new BufferedReader(new FileReader(file)); String data = ""; int i = 1; while ((data = br.readLine()) != null) { System.out.println(i + " " + data); i++; }// while br.close(); }// else }// hex |
'컴퓨터 관련 > JAVA 강의' 카테고리의 다른 글
java #30 Network, Port (0) | 2016.12.18 |
---|---|
java #29 IO Stream -출력- (파일복사, 객체 JVM외부로 보내기/읽기) (0) | 2016.12.18 |
java #27 Exception Handling, 예외처리 (0) | 2016.12.18 |
java #26 Map (0) | 2016.12.18 |
java #25 List(ArrayList, Vector) (0) | 2016.12.18 |