티스토리 뷰
입출력 전에, 스트림에 대해서 공부하겠습니다.
스트림이란? 순서가 있는 데이터를 운반하는데 사용되는 연결 통로이다.
하나의 스트림은 단 방향 통신만 가능하다.
* 입력 스트림 : 데이터 소스로부터 데이터를 읽기 위한 스트림이다.
* 출력 스트림 : 데이터 소스에 데이터를 소비하기 위한 스트림이다.
* 스트림의 종류
|
바이트 스트림(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 |
