어제 오늘 내일

[Java] 파일에 텍스트 쓰기 본문

IT/Java

[Java] 파일에 텍스트 쓰기

hi.anna 2021. 5. 29. 21:26

 

Java에서 파일을 다루는 법을 알아보고 있습니다.

[Java] 텍스트 파일 읽기 ( FileReader, BufferedReader, Scanner, Files )

[Java] 파일 생성하는 3가지 방법 (File, FileOutputStream, Files)

[Java] 파일, 디렉토리 존재 여부 확인하기

 

이번에는 Java API를 이용하여,

파일에 텍스트를 쓰는 방법을 알아보도록 하겠습니다.

  1. BufferedWriter
  2. PrintWriter
  3. FileOutputStream
  4. Files
  5. DataOutputStream

 

 

1. BufferedWriter

  코드  

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

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

            // 1. 파일 객체 생성
            File file = new File("d:\\example\\writeFile.txt");

            // 2. 파일 존재여부 체크 및 생성
            if (!file.exists()) {
                file.createNewFile();
            }

            // 3. Buffer를 사용해서 File에 write할 수 있는 BufferedWriter 생성
            FileWriter fw = new FileWriter(file);
            BufferedWriter writer = new BufferedWriter(fw);

            // 4. 파일에 쓰기
            writer.write("안녕하세요");

            // 5. BufferedWriter close
            writer.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

File file = new File("d:\\example\\writeFile.txt");

File 객체를 생성합니다.

 

if (!file.exists()) {
    file.createNewFile();
 }

파일이 해당 경로에 있는지 체크한 후, 

파일이 없으면 빈 파일을 하나 생성합니다.

 

FileWriter fw = new FileWriter(file);
BufferedWriter writer = new BufferedWriter(fw);

버퍼를 사용하면서, 파일을 쓰기 위해서

FileWriter와 BufferedWriter를 사용하였습니다.

FileWriter만 가지고도, 파일을 쓸 수 있습니다.

하지만, BufferedWriter와 함께 사용하면, 버퍼를 사용할 수 있기 때문에 더 효율적입니다.

 

writer.write("안녕하세요");

BufferedWriter의 write() 메소드를 이용해서 파일에 문자열을 씁니다.

 

writer.close();

다 사용한 BufferedWriter를 닫아 줍니다.

 

  이어쓰기  

FileWriter fw = new FileWriter(file, true);

FileWriter 생성자의 2번째 파라미터(append)는 

기존에 작성된 파일이 있을 경우, 이어 붙여서 쓸지, 새로 파일을 만들어서 쓸지를 결정합니다.

위와 같이 생성자의 2번째 파라미터를 true로 하면,

기존에 작성된 파일이 있을 경우, 그 뒤에 이어 붙여서 문자열이 써집니다.

 

 

 

2. PrintWriter

  코드  

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

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

            // 1. 파일 객체 생성
            File file = new File("d:\\example\\writeFile.txt");

            // 2. 파일 존재여부 체크 및 생성
            if (!file.exists()) {
                file.createNewFile();
            }

            // 3. Writer 생성
            FileWriter fw = new FileWriter(file);
            PrintWriter writer = new PrintWriter(fw);

            // 4. 파일에 쓰기
            writer.write("안녕하세요\n");
            writer.println("Nice to meet you");
            writer.print("!!");

            // 5. PrintWriter close
            writer.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  결과  

// d:\example\writeFile.txt
안녕하세요
Nice to meet you
!!

writer.write();

writer.println();

writer.print();

PrintWriter 클래스를 사용하면,

write() 메소드 뿐만 아니라, println(), print() 메소드를 사용할 수 있습니다.

println() 메소드를 사용하면 자동으로 줄 바꿈이 됩니다.

 

 

 

3. FileOutputStream

FileOutputStream은 byte를 쓸 수 있습니다.

따라서, FileOutputStream은 문자열을 파일에 쓸 때보다는, 

이미지 파일을 만드는 등, row byte를 파일에 쓸때 더 적합합니다.

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

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

            // 1. 파일 객체 생성
            File file = new File("d:\\example\\writeFile.txt");

            // 2. 파일 존재여부 체크 및 생성
            if (!file.exists()) {
                file.createNewFile();
            }

            // 3. Writer 생성
            FileOutputStream fos = new FileOutputStream(file);

            // 4. 파일에 쓰기
            fos.write("안녕하세요".getBytes());

            // 5. FileOutputStream close
            fos.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

fos.write("안녕하세요".getBytes());

FileOutputStream의 write() 메소드는 파라미터로 byte를 받습니다.

 

 

 

4. Files

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

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

            // 1. Path 객체 생성
            Path path = Paths.get("d:\\example\\writeFile.txt");

            // 2. 파일에 쓰기
            Files.write(path, "안녕하세요".getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Files.write(path, "안녕하세요".getBytes());

Java 7부터 사용할 수 있는 java.nio.file.Files 클래스는 static 메소드만 가지고 있습니다.

Files의 static 메소드인 Files.write()는 파라미터로 받은 byte[]를 파일에 써줍니다.

 

 

 

5. DataOutputStream

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

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

            // 1. 파일 객체 생성
            File file = new File("d:\\example\\writeFile.txt");

            // 2. 파일 존재여부 체크 및 생성
            if (!file.exists()) {
                file.createNewFile();
            }

            // 3. Writer 생성
            FileOutputStream fos = new FileOutputStream(file);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            DataOutputStream dos = new DataOutputStream(bos);

            // 4. 파일에 쓰기
            dos.writeUTF("안녕하세요");

            // 5. DataOutputStream close
            dos.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

dos.writeUTF("안녕하세요");

DataOutputStream을 이용해서 파일에 데이터를 쓸 수 있습니다.

writeUTF() 메소드를 이용하면, UTF-8 인코딩을 적용하여 파일에 문자열을 쓸 수 있습니다.

 


 

Java API를 이용하여, 파일을 쓰는 방법을 알아보았습니다.

 

 

반응형
Comments