File I/O

jungseo·2023년 5월 4일
0

Java

목록 보기
7/10

FileInputStream과 FileReader

  • FileInputStream는 바이트 단위로,
    FileReader는 문자 단위로 데이터를 읽음
  • FileInputStream은 인코딩이나 디코딩이 필요 없어 더 빠름
  • FileReader는 문자열 데이터를 읽어들이기 쉬움

FileOutputStream과 FileWriter

  • 텍스트 데이터를 파일에 쓰려면 FileWriter,
    바이트 단위 데이터를 파일에 쓰려면 FileOutputStream
  • FileWriter는 기본적으로 JVM의 기본 인코딩을 사용
    FileOutputStream은 인코딩을 고려하지 않으므로 직접 인코딩을 지정해야함

FileInputStream, FileOutputStream

  • BufferedInputStream, BufferedOutputStream 보조 스트림을 사용하면 성능 향상.
    버퍼는 바이트 배열로 여러 바이트를 저장하여 한번에 많은 양의 데이터를 입출력 가능
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileIOStreamTest {
    public static void main(String args[]) {

        try {
            FileOutputStream fileOutputStream = new FileOutputStream("codestates.txt");
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

            String word = "OutputStream Out";
            byte b[] = word.getBytes();
            fileOutputStream.write(b);
            fileOutputStream.close();
        } catch (Exception e) {
            System.out.println(e);
        }
//-------------------------------------------------------------------------------------------
        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);
        }
    }
}

FileReader, FileWriter

  • FileReader는 인코딩을 유니코드로 변환하고,
    FileWriter는 유니코드를 인코딩으로 변환
import java.io.*;

public class FileReaderWriterTest {
    public static void main(String[] args) {

        try {
            String filename = "codestates.txt";
            FileWriter fw = new FileWriter(filename);
            BufferedWriter bw = new BufferedWriter(fw);

            String str = "Writer wrote";
            bw.write(str);
            bw.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
//----------------------------------------------------------------------------
        try {
            String fileName = "codestates.txt";
            FileReader fileReader = new FileReader(fileName);
            BufferedReader br = new BufferedReader(fileReader);

            int data = 0;

            while ((data = br.read()) != -1) {
                System.out.print((char) data);
            }
            fileReader.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

File class

파일과 디렉토리에 접근 가능

import java.io.File;
import java.io.IOException;
public class FileClassTest {
    public static void main(String[] args) throws IOException {
    
        File file = new File("./codes.txt"); 


        System.out.println(file.createNewFile()); // 			=> false
        // 경로를 지정하여 객체 생성
        // 해당 경로해 해당 파일이 있으면 false 반환
        // 없으면 파일 생성 후 true 반환
        
        System.out.println(file.getPath()); // 					=> .\codes.txt

        // 파일의 경로 반환 (객체 생성시 지정한 절대경로 혹은 상대경로)
        
        System.out.println(file.getParent()); // 				=> .
        // 부모 디렉토리 반환
        
        System.out.println(file.getCanonicalPath()); //		    => D:\java\write-off\codes.txt

        // 파일의 정규 경로를 반환
        
        System.out.println(file.canWrite()); //				    => true
        // 파일에 작성을 할 수 있는지 boolean 값 반환
        
        System.out.println(file.canRead()); // 			        => true
        // 파일을 읽을 수 있는지 boolean 값 반환

        File file2 = new File("./", "newCodes.txt"); // ("부모", "자식")

        System.out.println(file2.createNewFile()); // 			=> false
        System.out.println(file2.getPath()); // 				=> .\newCodes.txt

        System.out.println(file2.getParent()); // 				=> .
        System.out.println(file2.getCanonicalPath()); // 		=> D:\java\write-off\newCodes.txt

        System.out.println(file2.canWrite()); // 				=> true
        System.out.println(file2.canRead()); // 			    => true

0개의 댓글