티스토리 뷰
입출력 전에, 스트림에 대해서 공부하겠습니다.
스트림이란? 순서가 있는 데이터를 운반하는데 사용되는 연결 통로이다.
하나의 스트림은 단 방향 통신만 가능하다.
* 입력 스트림 : 데이터 소스로부터 데이터를 읽기 위한 스트림이다.
* 출력 스트림 : 데이터 소스에 데이터를 소비하기 위한 스트림이다.
* 스트림의 종류
바이트 스트림(byte stream) |
데이터 종류가 파일, 그림, 동영상 등의 바이트 기반인 경우 8비트의 바이트 단위로 입출력하는 클래스 |
문자 스트림(character stream) |
문자데이터를 입출력하는 클래스 |
버퍼란? 데이터를 일정 크기 단위로 묶어서 저장하는 창고이다.
자바에서는 버퍼링된 스트림을 제공한다.
Why? 문자 하나하나를 처리하기엔 버겁기 때문에(오버헤드) 버퍼에 만들어진 일정공간에 담아서 사용한다.
* 버퍼 스트림
바이트기반 스트림 |
문자기반 스트림 |
BufferedInputStream BufferedOutputStream |
BufferedReader BufferedWriter |
* flush() : 버퍼의 모든 내용을 출력소스에 출력한 다음, 버퍼를 수동으로 비운다.
File 객체
- File객체는 파일이 아닌 파일 이름을 나타내는데,
파일 이름에 해당되는 파일이 실제로 존재하지 않을 수도 있다.
Why? 프로그램이 File객체를 이용하여 파일 이름을 파싱할 수 있기 때문이다.
File객체 생성 => File file = new File("Example.txt");
* File 클래스의 메소드
반환형 |
메소드 |
설명 |
boolean |
exists() |
파일의 존재 여부 |
boolean |
delete() |
파일을 삭제한다. |
boolean |
canExecute() |
파일을 실행할 수 있는지의 여부 |
boolean |
canRead() |
파일을 읽을 수 있는지의 여부 |
boolean |
canWrite() |
파일을 기록할 수 있는지의 여부 |
boolean |
isFile() |
파일이면 참(true)이다. |
boolean |
isDirectory() |
파일이 디렉토리이면 참(true)이다. |
boolean |
isHidden() |
파일이 숨겨진 파일이면 참(true)이다. |
string |
getName() |
파일의 이름을 반환한다. |
string |
getParent() |
파일의 부모 경로 이름을 반환한다. |
string |
getPath() |
파일의 경로를 반환한다. |
long |
length() |
파일 길이를 반환한다. |
간단한 이론을 마치고 실습을 통해 공부하겠습니다.
기본적인 파일 객체를 이용하여 전송하는 클래스입니다.
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class ExampleIO01 { public static void main(String[] args) throws IOException { // 1) File 클래스 // => 디스크 상에 존재하는 파일을 다루기 위한 클래스 File file = new File("tset1.txt"); // 만약에 파일이 존재하지 않으면 // File.exists() => 파일이 존재하면 true, 존재하지 않으면 false if (!file.exists()) { System.out.println("파일이 존재하지 않습니다."); file.createNewFile(); // 파일을 새로 만든다. => Checked Exception. } // 1) 목적지 : file - test.txt에다가 // 2) 데이터를 출력할 것이다. (write) // 파일에 텍스트 형태의 데이터를 출력하기 위해서 // Writer 객체를 만든다. 1,2번 단계를 동시에 수행 // 무엇을 할것인지? 목적지, 이어 쓸 것인지 여부 (is Append) default : false Writer out = new FileWriter(file, true); // 목적지에 데이터 출력 (write 메소드 활용) out.write("ABCDE\n"); out.write("안녕히 가세요"); // 목적지와 무엇을 할 것인지 설정이 완료되면 바로 닫아준다. out.close(); System.out.println("프로그램 종료"); } }
기본적인 파일 객체를 이용하여 불러오는 클래스입니다.
import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Reader; public class ExampleIO2 { public static void main(String[] args) throws IOException { File file = new File("tset1.txt"); // 파일이 존재한다면 if(file.exists()){ // 뭘 한건지? 목적지 => 목적지에서 읽어 오겠다.(Input - Reader) Reader in = new FileReader(file); // 1) reader에서는 한글자 한글자씩 읽어온다. int readData=0; // EOF : -1 => End Of File while((readData = in.read())!= -1){ System.out.print((char)readData); // 유니코드인 int로 읽어오기 때문에 char로 형변환 해야한다. } System.out.println(); in.close(); }else{ System.out.println("파일이 없습니다."); } System.out.println("프로그램 종료"); } }
보조스트림을 사용하여 전송하는 클래스 입니다.
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class ExampleIO3 { public static void main(String[] args) throws IOException { // 보조 스트림 // => 주 스트림을 보조해주는 스트림 // 주 스트림에는 없는 여러가지 기능들을 제공한다. // BufferedReader/InputStream // BufferedWriter/OutputStream File file = new File("BufferedTest1.txt"); if (!file.exists()) { file.createNewFile(); } // 1) 주 스트림을 설정한다. FileWriter out = new FileWriter(file); // 2) 보조스트림을 만든다. 매개변수로 주스트림 객체가 들어간다. BufferedWriter bw = new BufferedWriter(out); // * 배열이라고 하는 것을 전부다 버퍼(Buffer)라고 한다. // 5개 짜리 배열 bw.write("Hello"); // char[] 버퍼를 만든다. 해당 문자열의 갯수만큼이 char 형 배열을 만들고 // 해당 데이터를 복사 한 후에 파일에 전송한다. \n또는 문자열이 끝난 것을 기준으로 // 한다. // BufferedWriter에서 자동으로 배열을 만들어 낸다. bw.write("World!!!"); // 8개 짜리 배열 // 보조스트림을 닫으면 주 스트림은 자동으로 닫힌다. bw.close(); System.out.println("프로그램 종료"); } }
보조스트림을 사용하여 읽어오는 클래스 입니다.
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class ExampleIO04 { public static void main(String[] args) throws IOException { File file = new File("BufferedTest1.txt"); if (file.exists()) { // 1) 주 스트림 객체 생성 FileReader in = new FileReader(file); // 2) 보조 스트림 객체 생성 BufferedReader br = new BufferedReader(in); // BufferedReader readLine() => 한 줄씩 한꺼번에 읽어온다. // (개행문자를 만나기 전까지의 문자열들을 한번에 읽어온다.) String line = ""; // 한 줄씩 읽어오다가 더 이상 읽을 줄이 없을 떄 까지 반복 while((line = br.readLine())!=null){ System.out.println(line); } } else { System.out.println("파일이 없습니다."); } System.out.println("프로그램 종료"); } }
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; // System.in // System.out // 1) System: 환경 // System.in: 환경에서 뭔가 데이터를 받아오겠다. (대표적인 입력 장치로부터 ...) // 키보드 (대표적인 입력 장치) // System.out: 환경에다 뭔가 내가 발생시킨 데이터를 출력하겠다. // 모니터 (대표적인 출력 장치) public class ExampleIO05 { public static void main(String[] args) throws IOException { String str = ""; File file = new File("log.txt"); Scanner sc = new Scanner(System.in); if (file.exists()) { FileReader in = new FileReader(file); BufferedReader br = new BufferedReader(in); String line = ""; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } else { file.createNewFile(); } FileWriter out = new FileWriter(file, true); BufferedWriter bw = new BufferedWriter(out); while (!str.toLowerCase().equals("exit")) { System.out.print("내용 입력 >> "); str = sc.nextLine(); if (str.toLowerCase().equals("exit")) { System.out.println("프로그램 종료"); continue; } bw.write(str + "\n"); } bw.close(); } }
'프로그래밍 > Java' 카테고리의 다른 글
자바 ! 소켓프로그래밍 (Server, Client, Socket, TCP, UDP.Thread, BroadCasting) (0) | 2017.05.21 |
---|---|
자바 ! 파일 입출력2 (Stream, DataInput/Output, ObjectInput/Output) (1) | 2017.05.18 |
자바 ! 동기화 (Synchronization , synchronized) (1) | 2017.05.16 |
자바 ! 쓰레드 ( Thread, Start , Run, Priority ) (0) | 2017.05.15 |
자바 ! 컬렉션 프레임워크 ( Collection Framework , List, ArrayList, HashSet, TreeSet, HashMap, Iterator) (0) | 2017.05.14 |