FileReader fReader = new FileReader("test.txt"); // 기반 스트림 생성
BufferedReader br = new BufferedReader(fReader); // 보조 스트림 생성
...
br.read();
br.flush();
br.close();
📌 프로그램 종료시 닫지 않은 스트림을 JVM이 자동적으로 닫아 주긴 하지만 반드시 다 사용한 후에는 close()를 호출해야 한다.
예외적으로 메모리를 사용하는 스트림과 표준 입출력 스트림은 따로 닫아주지 않아도 된다.
구분 | 스트림 | 설명 |
---|---|---|
바이트기반 스트림 | FileInputStream FileOutputStream | 파일 |
바이트기반 스트림 | CharArrayInputStream CharArrayOutputStream | 메모리 |
바이트기반 스트림 | PipedInputStream PipedOutputStream | 프로세스 |
바이트기반 스트림 | AudioInputStream AudioOutputStream | 오디오장치 |
바이트기반 보조스트림 | BufferedInputStream BufferedOutputStream | 버퍼를 이용해서 입출력 향상 |
바이트기반 보조스트림 | FilterInputStream FilterOutputStream | 필터를 이용해서 입출력 향상 |
바이트기반 보조스트림 | DataInputStream DataOutputStream | 기본형 타입으로 데이터를 처리 |
바이트기반 보조스트림 | SequenceInputStream | 두 개의 스트림을 하나로 연결 |
바이트기반 보조스트림 | ObjectInputStream ObjectOutputStream | 데이터를 객체 단위로 읽고 사용 |
바이트기반 보조스트림 | PrintStream | 버퍼를 이용하여 추가적인 print 관련 기능이 있음 |
바이트기반 보조스트림 | PushbackInputStream | 버퍼를 이용하여 읽어온 데이터를 다시 되돌리는 기능이 있음 |
출처 - Java의 정석
구분 | 스트림 | 설명 |
---|---|---|
문자기반 스트림 | FileReader FileWriter | 파일 |
문자기반 스트림 | CharArrayReader CharArrayWriter | 메모리 |
문자기반 스트림 | PipedReader PipedWriter | 프로세스 |
문자기반 스트림 | StringReader StringWriter | 문자열 |
문자기반 보조스트림 | BufferedReader BufferedWriter | 버퍼를 이용해서 입출력 향상 |
문자기반 보조스트림 | FilterReader FilterWriter | 필터를 이용해서 입출력 향상 |
문자기반 보조스트림 | LinNumberReader | 읽어 온 데이터의 줄번호를 카운트 |
문자기반 보조스트림 | PrintWriter | 버퍼를 이용하며 추가적인 print관련 기능이 있음 |
문자기반 보조스트림 | PushbackReader | 버퍼를 이용해서 읽어온 데이터를 다시 되돌리는 기능이 있음 |
출처 - Java의 정석
생성자 | 내용 |
---|---|
File(String pathname) | 주어진 파일명 또는 파일 경로로 File 인스턴스를 생성 |
File(String parent, String child) | 파일 경로와 파일명을 따로 분리하여 File 인스턴스를 생성 할 수 있게함 |
File(File parent, String child) | 파일 경로(File객체)와 파일명을 따로 분리하여 File 인스턴스를 생성 할 수 있게함 |
File(URI uri) | 주어진 URI로 File 인스턴스를 생성 |
// OS에 사용하는 경로 구분자를 반환( 윈도우 : ';' / 유닉스 : ':' )
public static final char pathSeparatorChar = fs.getPathSeparator();
public static final String pathSeparator = "" + pathSeparatorChar;
// OS에 사용하는 이름 구분자를 반환( 윈도우 : '\' / 유닉스 : '/' )
public static final char separatorChar = fs.getSeparator();
public static final String separator = "" + separatorChar;
System.out.println("## File.pathSeparator = " + File.pathSeparator);
System.out.println("## File.pathSeparatorChar = " + File.pathSeparatorChar);
System.out.println("## File.separator = " + File.separator);
System.out.println("## File.separatorChar = " + File.separatorChar);
[ 실행결과 ]
## File.pathSeparator = ;
## File.pathSeparatorChar = ;
## File.separator = \
## File.separatorChar = \
🔎 separatorChar와 pathSeparator 차이
- 코드를 봐도 Char가 붙어있는건 앞에 공백이 있는 것 같음
- 좀 더 찾아봐야 할 듯
// 1. 파일 경로만으로 File 인스턴스 생성
String filePath = "D:\\project\\workspace\\studyhalle\\src\\main\\java\\s1\\week13";
File file = new File(filePath);
System.out.println("## file.exists() = " + file.exists());
System.out.println("## file.getPath() = " + file.getPath());
System.out.println("============================================");
// 2. 파일 경로, 파일명으로 File 인스턴스 생성
String filePath2 = "D:\\project\\workspace\\studyhalle\\src\\main\\java\\s1\\week13\\";
String fileName2 = "file2.txt";
File file2 = new File(filePath2, fileName2);
System.out.println("## file2.exists() = " + file2.exists());
System.out.println("## file2.getPath() = " + file2.getPath());
System.out.println("============================================");
// 3. 파일 경로+파일명으로 File 인스턴스 생성
String filefullPath = "D:\\project\\workspace\\studyhalle\\src\\main\\java\\s1\\week13\\file3.txt";
File file3 = new File(filefullPath);
// File 인스턴스 생성 != File 생성
// 파일명까지 넣은 경우 해당 위치에 파일이 있어야함
try {
file3.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("## file3.exists() = " + file3.exists());
System.out.println("## file3.getPath() = " + file3.getPath());
System.out.println("============================================");
[ 실행결과 ]
## file.exists() = true
## file.getPath() = D:\project\workspace\studyhalle\src\main\java\s1\week13
============================================
## file2.exists() = false
## file2.getPath() = D:\project\workspace\studyhalle\src\main\java\s1\week13\file2.txt
============================================
## file3.exists() = true
## file3.getPath() = D:\project\workspace\studyhalle\src\main\java\s1\week13\file3.txt
============================================
String fileFullPath = "D:\\project\\workspace\\studyhalle\\src\\main\\java\\s1\\week13\\writeFile.txt";
String str ="파일 쓰기 테스트 입니다!!";
try ( FileWriter fWriter = new FileWriter(fileFullPath);
BufferedWriter bw = new BufferedWriter(fWriter); ) {
bw.write(str);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e){
e.getStackTrace();
}
String fileFullPath = "D:\\project\\workspace\\studyhalle\\src\\main\\java\\s1\\week13\\writeFile.txt";
try ( FileReader fReader = new FileReader(fileFullPath);
BufferedReader br = new BufferedReader(fReader); ) {
String line = "";
while ( (line = br.readLine()) != null ) {
System.out.print(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e){
e.getStackTrace();
}
[ 실행결과 ]
파일 쓰기 테스트 입니다!!