1. InputStream, OutputStream
스트림은 단방향으로만 데이터를 전송할 수 있기 때문에 입력과 출력을 동시에 처리하기 위해서는 각각의 스트림이 필요하다.
입출력 스트림은 어떤 대상을 다루느냐에 따라 종류가 나뉜다.
File을 다룰 경우 FileInputStream/FileOutputStream을 사용하고 프로세스를 다룰 때는 PipedInputStream/PipedOutputStream을 사용한다.
FileInputStream
import java.io.FileInputStream;
public class FileInputStreamExample {
public static void main(String args[])
{
try {
FileInputStream fileInput = new FileInputStream("codestates.txt");
int i = 0;
while ((i = fileInput.read()) != -1) { //fileInput.read()의 리턴값을 i에 저장한 후, 값이 -1인지 확인합니다.
System.out.print((char)i);
}
fileInput.close();
}
catch (Exception e) {
System.out.println(e);
}
}
}
FileInputStream의 Read()는 파일의 내용을 바이트 단위로 읽어서 정수로 반환해주는 메서드이다.
i = fileInput.read()) ≠ -1 이라는 코드는 ‘파일의 내용이 비어있지 않을 때’ 라는 의미와 같다.
BufferedInputStream이라는 보조 스트림을 사용하면 성능이 향상되기 때문에 대부분 이를 사용한다.
버퍼란 바이트 배열로서, 여러 바이트를 저장하여 한 번에 많은 양의 데이터를 입출력할 수 있도록 도와주는 임시 저장 공간이다.
import java.io.FileInputStream;
import java.io.BufferedInputStream;
public class FileInputStreamExample {
public static void main(String args[])
{
try {
FileInputStream fileInput = new FileInputStream("codestates.txt");
BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
int i = 0;
while ((i = bufferedInput.read()) != -1) {
System.out.print((char)i);
}
fileInput.close();
}
catch (Exception e) {
System.out.println(e);
}
}
}
FileOutputStream
import java.io.FileOutputStream;
public class FileOutputStreamExample {
public static void main(String args[]) {
try {
FileOutputStream fileOutput = new FileOutputStream("codestates.txt");
String word = "code";
byte b[] = word.getBytes();
fileOutput.write(b);
fileOutput.close();
}
catch (Exception e) {
System.out.println(e);
}
}
}
InputStream과 마찬가지로 바이트 단위로 입력받은 내용을 파일에 기록하고 내보내는 기능을 한다.
2. FileReader / FileWriter
FileInput(Output)Stream의 경우 바이트 기반 스트림 즉, 입출력 단위가 1byte인 스트림이다.
하지만 char 타입은 2byte이다.
이를 해소하기 위해 자바에서 제공하는 문자 기반 스트림이 FileReader, FileWriter이다.
문자 기반 스트림과 그 하위 클래스는 여러 종류의 인코딩과 유니코드간의 변환을 자동으로 처리한다.
FileReader는 인코딩을 유니코드로 변환하고, FileWriter는 유니코드를 인코딩으로 변환한다.
3. File
자바에서는 File 클래스로 파일과 디렉토리에 접근이 가능하다.
import java.io.*;
public class FileExample {
public static void main(String args[]) throws IOException {
File file = new File("../codestates.txt");
System.out.println(file.getPath());
System.out.println(file.getParent());
System.out.println(file.getCanonicalPath());
System.out.println(file.canWrite());
}
}
//출력
..\\codestates.txt
..
C:\\Users\\chohayan\\IdeaProjects\\codestates.txt
false
만약 호출하는 파일이 존재하지 않더라도 컴파일 에러가 발생하지는 않는다.
파일 클래스를 통해 파일을 생성하려면 createNewFile() 메서드를 사용하면 된다.
File file = new File("./", "newCodestates.txt"); //파일을 생성할 경로 및 파일명 작성
file.createNewFile();
'CodeStates_BE_44 > TIL' 카테고리의 다른 글
[네트워크] 웹 애플리케이션 작동 원리 (0) | 2023.03.24 |
---|---|
Day 18. [Java] 스레드, JVM (0) | 2023.03.10 |
Day 16. [Java] 애너테이션, 람다, 스트림 (0) | 2023.03.08 |
Day 15. [Java] 컬렉션 (1) | 2023.03.07 |
Day 12. [Java] 객체지향 프로그래밍 심화_다형성, 추상화 (0) | 2023.02.28 |