본문 바로가기
IT/JAVA

JAVA - 파일 입출력(I/O)

by 삐약 개발자 2024. 12. 3.
반응형

파일을 읽고 쓰고 생성하고 삭제하기 위해 사용!

문자/바이트 기반 스트림의 간단한 입출력 코드활용

파일 클래스

 

InputStream (가져오기) / OutputStream (내보내기)

스트림을 단방향으로 

 

File 입출력 스트림은, 바이트 기반 스트림 / 바이트 기반은 입출력 단위가 1byte라는 뜻

Java에서 char 타입은 2byte(자바 기본 유닛 참고)

 

 

1.터미널에 입력

 echo code >> java.txt

//파일이 생성됨

2. main 클래스에 실행 해주

FileInputStream fileInputStream = new FileInputStream("java.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-16");

int i = 0;
while((i = inputStreamReader.read()) != -1){
    System.out.println((char)i);
}
fileInputStream.close();

 

▼ 한글도 가능함 ▼

FileInputStream fileInputStream = new FileInputStream("java.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-16");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {

String line;
while ((line = bufferedReader.readLine()) != null) {
    System.out.println(line);
}

파일의 인코딩이 Java의 기본 문자 인코딩과 일치하지 않으면 문자가 깨진 현상이 발생할수 있음 (위에 코드가 방지할수있음)

 

  • InputStreamReader 사용: 바이트 스트림을 문자 스트림으로 변환하면서 인코딩 지정.
  • BufferedReader 사용: 효율적으로 파일을 한 줄씩 읽음.
  • UTF-16 지정: BOM을 무시하고 파일 내용을 정상적으로 처리.

 

OutputStream  -- 덮어씀

 

FileReader / FileWriter

 

File 입출력 스트림은, 바이트 기반 스트림 / 바이트 기반은 입출력 단위가 1byte라는 뜻

Java에서 char 타입은 2byte(자바 기본 유닛 참고)임

이를 해소하기 위해 자바에서는 문자 기반 스트립을 제공!

 

FileReader

String fileName = "java.txt";
FileReader file = new FileReader(fileName);

int data = 0;

while((data=file.read()) != -1) {
    System.out.print((char)data);
}
file.close();

위에서 덮어쓴 문자를 읽어와서 출력

 

FileWriter

 String fileName = "java.txt";
FileWriter writer = new FileWriter(fileName);

String str = "written!";
writer.write(str);
writer.close();

그냥 그 뒤에 입력하고 싶은 문자열을 넣음

 

파일이 없으면 스스로 만들어서 내가 넣고싶은 문자열을 그 안에 담음

close 시점할때 담기기에 꼭 close 해 줘야 실행이 됨

 

총 합치면 아래 코드처럼 사용

//문자열 파일 생성후 만들어줌
FileWriter fileWriter = new FileWriter("Practice.txt");

String message = "Hello World!";
fileWriter.write(message);
fileWriter.close();

//불러옴
FileReader fileReader = new FileReader("Practice.txt");

int i = 0;
while ((i = fileReader.read()) != -1){
    System.out.println((char)i);
}
fileReader.close();

 

File

File file = new File("../../java.txt");
// ../상대경로
System.out.println(file.getPath());
System.out.println(file.getParent());
System.out.println(file.getCanonicalPath());
System.out.println(file.canWrite());
// ./ 현재를 기준으로 true 나옴
//파일이 없거나 권한이 없어도 false 나옴

파일이 없으면 생성 시키고 이름 변경도 가능

File file = new File("./spring.txt");

file.createNewFile();
file.renameTo(new File("./","java_spring.txt"));
반응형

'IT > JAVA' 카테고리의 다른 글

JAVA - 자바 가상 머신(Java Virtual Machine)  (0) 2024.12.03
JAVA - 스레드(Thread)  (0) 2024.12.03
JAVA - 스트림(Stream)  (0) 2024.12.02
JAVA - 람다(Lambda)  (0) 2024.12.02
JAVA - 애너테이션(Annotation)  (1) 2024.12.02