파일 입출력(I/O)

이용만·2023년 3월 9일
0

🔎InputStream, OutputStream

자바에서는 입출력을 다루기 위한 InputStream, OutputStream을 제공한다. 스트림은 단방향으로만 데이터를 전송할 수 있기에, 입력과 출력을 동시에 처리하기 위해서는 각각의 스트림이 필요하다.
가장 빈번하게 사용되는 FileInputStream과 FileOutputStream을 알아보자.

✏️FileInputStream

ublic 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);
        }
    }
}

BufferedInputStream이라는 보조 스트림을 사용하면 성능이 향상되기 때문에, 대부분의 경우 이를 사용한다. 버퍼란 바이트 배열로서, 여러 바이트를 저장하여 한 번에 많은 양의 데이터를 입출력할 수 있도록 도와주는 임시 저장 공간이라고 이해하면 된다.

✏️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);
        }
    }
}

🔎FileReader / FileWriter

🔻FileReader
자바에서는 문자 기반 스트림을 제공한다. 문자 기반 스트림에는 FileReader와 FileWriter가 있다. 문자 기반 스트림은 문자 데이터를 다룰 때 사용한다.

FileReader는 인코딩을 유니코드로 변환하고, FileWriter는 유니코드를 인코딩으로 변환한다.

public class FileReaderEx {
    public static void main(String[] args) {
        try{
            String fileName =  "codestates.txt";
            FileReader file = new FileReader(fileName);
            BufferedReader bufferedReader = new BufferedReader(file);

            int data = 0;

            while ((data=bufferedReader.read()) !=-1){
                System.out.println((char)data);
            }
            file.close();
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}

🔻FileWriter

public class FileWriterExample {
    public static void main(String[] args) {
        try{
            String fileName = "codestates.txt";
            FileWriter writer = new FileWriter(fileName);

            String str = "written!";
            writer.write(str);
            writer.close();;
        }
        catch (Exception e){
            System.out.println(e);
        }
    }
}

🔎File

자바에서는 File 클래스로 파일과 디렉토리에 접근할 수 있다.

public class FileEx {
    public static void main(String[] args) {
        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()); // 추상 경로 이름으로 표시된 파일을 수정할 수 있는지 여부 확인 boolean
    }
}

파일 인스턴스를 생성하는게 파일을 생성하는 것은 아니다.
1) 첫번 째 인자에 경로를 써준다. './'
2) 파일명을 작성한다. 'newCodestates.txt'
3) 'createNewFile' 메서드를 호출한다.

File file = new File("./", "newCodestates.txt");
file.createNewFile();
profile
성장하는 개발자가 되고자 합니다.

0개의 댓글