데이터
어떤 데이터를 출력하느냐에 따라 byte 또는 문자 단위로 전송이 된다.
바이트 입/출력 스트림은 이진 데이터를 입력 받거나 출력할 때 사용된다.
이미지, 오디오, 비디오 등의 이진 데이터를 처리할 때 유용하다

FileInputStream fis = new FileInputStream([파일 경로]);
InputStream 클래스를 상속 받는다.
파일, 네트워크 등의 다양한 소스로부터 데이터를 읽을 수 있다.
| 리턴 타입 | 메서드 | 설명 |
|---|---|---|
int |
read() |
데이터 소스로부터 다음 1바이트를 읽고 바이트를 리턴, 바이트가 없으면 -1 반환 |
int |
read(byte[] b) |
읽은 바이트를 매개값의 배열에 저장 후 읽은 바이트 수를 리턴 |
void |
close() |
스트림을 닫고 관련된 자원 해제 |
int |
available() |
읽기 가능한 바이트의 추정치를 반환 |
public class ByteStreamInput {
public static void main(String[] args) {
// 인스턴스 생성, 생성자를 통해 파일의 경로 전달
try(FileReader fis = new FileReader("test.txt")) {
int i;
// read()메서드를 사용해 바이트 단위 읽기
while ((i = fis.read()) != -1){
System.out.print((char) i);
}
} catch (IOException e) {
e.getStackTrace();
}
// try with resource를 통한 자동 자원 해제
}
}

FileOutputtStream fos = new FileOutputStream([파일경로]);
OutputStream 클래스를 상속 받는다.
파일, 네트워크 등 다양한 대상에 데이터를 쓸 수 있다.
| 리턴 타입 | 메서드 | 설명 |
|---|---|---|
void |
write(int b) |
1byte 출력 |
void |
write(byte[] b) |
매개값의 배열 b의 모든 바이트를 출력 |
void |
write(byte[] b, int off, int len) |
매개값의 배열 b[off]부터 len개의 바이트를 출력 |
void |
flush() |
출력 버퍼에 잔류하는 모든 바이트를 출력 |
void |
close() |
스트림을 닫고 관련된 자원 해제 |
파일의 문자열을 읽거나 쓸 때 사용한다.
입출력 단위가 문자인 것을 제외하고 바이트 입/출력 스트림과 사용방법이 동일하다.
인코딩이 자동으로 처리 되어 별도의 인코딩 처리가 필요 없다. 또한 UTF-16 인코딩을 기본으로 사용하여 여러 언어를 처리할 수 있다.

| 리턴 타입 | 메서드 | 설명 |
|---|---|---|
int |
read() |
데이터 소스로부터 다음 문자 1개를 읽고 문자를 리턴, 바이트가 없으면 -1 반환 |
int |
read(char[] cbuf) |
읽은 문자를 매개값의 배열에 저장 후 읽은 문자 수를 리턴 |
void |
close() |
스트림을 닫고 관련된 자원 해제 |

| 리턴 타입 | 메서드 | 설명 |
|---|---|---|
void |
write(int c) |
매개값의 문자 출력 |
void |
write(char[] cbuf) |
매개값의 배열안의 모든 문자 출력 |
void |
write(char[] cbuf, int off, int len) |
매개값의 배열 cbuf[off]부터 len개의 바이트를 출력 |
void |
write(String str) |
매개값의 문자열 출력 |
void |
write(String str, int off, int lne) |
매개값의 문자열을 off 순번부터 len개까지의 문자를 출력 |
void |
flush() |
출력 버퍼에 잔류하는 모든 바이트를 출력 |
void |
close() |
스트림을 닫고 관련된 자원 해제 |
public class FileWriterTest {
public static void main(String[] args) {
try (FileWriter writer = new FileWriter("example.txt")){
writer.write("ddd");
writer.write("\njava is fun");
} catch (IOException e){
e.printStackTrace();
}
}
}
자원이 해제되지 않으면 파일 삭제 및 수정이 안되니 꼭 close()를 해주자
자바에서 파일 시스템을 다루기 위해 쓰이는 클래스이다.
파일 및 디렉토리를 생성, 관리, 조회 등 다양한 파일 시스템 작업을 위해 사용한다.
File file = new File([파일 경로]);
파일 객체를 생성해도 파일이나 디렉토리가 생성되는 것이 아니다.
파일 객체를 생성하며 입력한 경로에 실제 파일이나 디렉토리가 없더라도 예외가 발생하지 않는다.
그렇기 때문에
boolean file.exists() 메서드를 이용해 실제 파일이 있는지 확인을 해야한다.
file.exists()가 false일 경우
파일 및 디렉토리를 생성할 수 있다.
files.exists() == true일 경우
files.exists() == false일 경우
Files 클래스는 정적 메서드로 구성되어있기 때문에 객체를 생성할 필요가 없다.
메서드들은 매개값으로 Path 객체를 받아 파일 생성, 복사, 삭제 등의 기능을 수행한다.

public class FileTest {
public static void main(String[] args) {
/* 파일 읽기 */
Path filePath = Paths.get("C:/a/example.txt");
try {
// 파일을 바이트 배열로 읽기
byte[] fileBytes = Files.readAllBytes(filePath);
String fileContent = new String(fileBytes);
System.out.println("파일 내용: \n" + fileContent);
} catch (IOException e) {
e.printStackTrace();
}
/* 파일 쓰기 */
filePath = Paths.get("C:/a/output.txt");
String content = "이 파일에 쓰여진 내용입니다.";
try {
// 문자열을 파일에 쓰기 (기존 파일이 있으면 덮어씌워짐)
Files.write(filePath, content.getBytes(StandardCharsets.UTF_8));
System.out.println("파일에 내용이 성공적으로 쓰였습니다.");
} catch (IOException e) {
e.printStackTrace();
}
/* 파일 복사 */
Path source = Paths.get("C:/a/example.txt");
Path target = Paths.get("C:/a/example_copy.txt");
try {
Files.copy(source, target);
System.out.println("파일이 성공적으로 복사되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
/* 파일 이동 */
source = Paths.get("C:/a/example.txt");
target = Paths.get("C:/a/moved_example.txt");
try {
Files.move(source, target);
System.out.println("파일이 성공적으로 이동되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
/* 파일 삭제 */
filePath = Paths.get("C:/a/example.txt");
try {
Files.delete(filePath);
System.out.println("파일이 성공적으로 삭제되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
/* 파일 존재 확인 */
filePath = Paths.get("C:/a/example.txt");
if (Files.exists(filePath)) {
System.out.println("파일이 존재합니다.");
} else {
System.out.println("파일을 찾을 수 없습니다.");
}
}
}