file-io 자바 읽기 - 어떻게 파일을 생성하고 Java로 파일을 작성합니까?





15 Answers

자바 7 이상 :

try (Writer writer = new BufferedWriter(new OutputStreamWriter(
              new FileOutputStream("filename.txt"), "utf-8"))) {
   writer.write("something");
}

유용한 유틸리티가 있습니다.

FileWriter 사용할 수도 있지만 기본 인코딩을 사용한다는 점에 유의하십시오. 이는 종종 나쁜 생각입니다. 인코딩을 명시 적으로 지정하는 것이 가장 좋습니다.

아래는 Java에 대한 최초의 7 가지 답변입니다.

Writer writer = null;

try {
    writer = new BufferedWriter(new OutputStreamWriter(
          new FileOutputStream("filename.txt"), "utf-8"));
    writer.write("Something");
} catch (IOException ex) {
    // Report
} finally {
   try {writer.close();} catch (Exception ex) {/*ignore*/}
}

참고 항목 : 파일 읽기, 쓰기 및 만들기 (NIO2 포함).

텍스트 배열 입출력

자바에서 (텍스트) 파일을 만들고 쓰는 가장 간단한 방법은 무엇입니까?




public class Program {
    public static void main(String[] args) {
        String text = "Hello world";
        BufferedWriter output = null;
        try {
            File file = new File("example.txt");
            output = new BufferedWriter(new FileWriter(file));
            output.write(text);
        } catch ( IOException e ) {
            e.printStackTrace();
        } finally {
          if ( output != null ) {
            output.close();
          }
        }
    }
}



용도:

try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8))) {
    writer.write("text to write");
} 
catch (IOException ex) {
    // Handle me
}  

try() 를 사용하면 스트림이 자동으로 닫힙니다. 이 버전은 짧고 빠르며 (버퍼링 됨) 인코딩을 선택할 수 있습니다.

이 기능은 Java 7에서 도입되었습니다.




텍스트 파일에 문자열을 입력합니다.

String content = "This is the content to write into a file";
File file = new File("filename.txt");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close(); // Be sure to close BufferedWriter

우리는 쉽게 새 파일을 만들고 그 안에 내용을 추가 할 수 있습니다.




저자는 EoL'd 된 Java 버전의 솔루션 (Sun과 IBM이 모두 기술적으로 가장 널리 사용되는 JVM 임)을 요구하는지 여부를 지정하지 않았으므로 대부분의 사람들이 필자의 질문이 텍스트 (비 - 바이너리) 파일이라고 지정되기 전에 나는 나의 대답을 제공하기로 결정했다.

우선 Java 6의 수명이 다해 가고 있으며 작성자가 기존 호환성을 필요로하지 않기 때문에 자동으로 Java 7 이상 (Java 7은 IBM에서 아직 출시하지 않았습니다)을 의미합니다. 따라서 파일 I / O 자습서를 바로보실 수 있습니다. https://docs.oracle.com/javase/tutorial/essential/io/legacy.html

Java SE 7 릴리스 이전에는 java.io.File 클래스가 파일 I / O에 사용 된 메커니즘 이었지만 몇 가지 단점이있었습니다.

  • 많은 메소드가 실패 할 때 예외를 던지지 않으므로 유용한 오류 메시지를 얻는 것이 불가능했습니다. 예를 들어 파일 삭제가 실패한 경우 프로그램은 "삭제 실패"를 수신하지만 파일이 존재하지 않았거나 사용자에게 사용 권한이 없거나 다른 문제가 있었기 때문에 프로그램이 실패했는지 여부를 알 수 없습니다.
  • 이름 바꾸기 방법이 여러 플랫폼에서 일관되게 작동하지 않았습니다.
  • 심볼릭 링크에 대한 실질적인 지원은 없었습니다.
  • 파일 권한, 파일 소유자 및 기타 보안 속성과 같은 메타 데이터에 대한 추가 지원이 필요했습니다. 파일 메타 데이터에 액세스하는 것이 비효율적이었습니다.
  • 많은 File 메서드는 확장되지 않았습니다. 서버를 통해 큰 디렉토리 목록을 요청하면 중단 될 수 있습니다. 또한 큰 디렉토리는 메모리 자원 문제를 일으켜 서비스 거부를 초래할 수 있습니다.
  • 순환 적 심볼릭 링크가있는 경우 재귀 적으로 파일 트리를 걸고 적절하게 응답 할 수있는 안정적인 코드를 작성할 수 없었습니다.

오, 그게 java.io를 배제합니다. 파일. 파일을 쓰거나 추가 할 수없는 경우 이유를 알지 못할 수도 있습니다.

다음 자습서를 계속 검토 할 수 있습니다. https://docs.oracle.com/javase/tutorial/essential/io/file.html#common

미리 텍스트 파일에 작성 (추가) 할 모든 행이있는 경우 https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#write-java.nio.file.Path-java.lang.Iterable-java.nio.charset.Charset-java.nio.file.OpenOption...- 권장합니다. https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#write-java.nio.file.Path-java.lang.Iterable-java.nio.charset.Charset-java.nio.file.OpenOption...-

다음은 간단한 예입니다.

Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, StandardCharsets.UTF_8);

또 다른 예 (추가) :

Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE);

파일 내용을 다음과 같이 작성하려는 경우 https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedWriter-java.nio.file.Path-java.nio.charset.Charset-java.nio.file.OpenOption...-

단순화 된 예 (자바 8 이상) :

Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file)) {
    writer.append("Zero header: ").append('0').write("\r\n");
    [...]
}

또 다른 예 (추가) :

Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) {
    writer.write("----------");
    [...]
}

이 방법은 작성자에게 최소한의 노력을 요구하며 [텍스트] 파일에 쓸 때 다른 모든 사람들보다 선호해야합니다.




용도:

JFileChooser c = new JFileChooser();
c.showOpenDialog(c);
File writeFile = c.getSelectedFile();
String content = "Input the data here to be written to your file";

try {
    FileWriter fw = new FileWriter(writeFile);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.append(content);
    bw.append("hiiiii");
    bw.close();
    fw.close();
}
catch (Exception exc) {
   System.out.println(exc);
}



기존 파일을 덮어 쓰지 않고 파일을 만들려면 :

System.out.println("Choose folder to create file");
JFileChooser c = new JFileChooser();
c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
c.showOpenDialog(c);
c.getSelectedFile();
f = c.getSelectedFile(); // File f - global variable
String newfile = f + "\\hi.doc";//.txt or .doc or .html
File file = new File(newfile);

try {
    //System.out.println(f);
    boolean flag = file.createNewFile();

    if(flag == true) {
        JOptionPane.showMessageDialog(rootPane, "File created successfully");
    }
    else {
        JOptionPane.showMessageDialog(rootPane, "File already exists");
    }
    /* Or use exists() function as follows:
        if(file.exists() == true) {
            JOptionPane.showMessageDialog(rootPane, "File already exists");
        }
        else {
            JOptionPane.showMessageDialog(rootPane, "File created successfully");
        }
    */
}
catch(Exception e) {
    // Any exception handling method of your choice
}



package fileoperations;
import java.io.File;
import java.io.IOException;

public class SimpleFile {
    public static void main(String[] args) throws IOException {
        File file =new File("text.txt");
        file.createNewFile();
        System.out.println("File is created");
        FileWriter writer = new FileWriter(file);

        // Writes the content to the file
        writer.write("Enter the text that you want to write"); 
        writer.flush();
        writer.close();
        System.out.println("Data is entered into file");
    }
}



내가 찾을 수있는 가장 간단한 방법은 다음과 같습니다.

Path sampleOutputPath = Paths.get("/tmp/testfile")
try (BufferedWriter writer = Files.newBufferedWriter(sampleOutputPath)) {
    writer.write("Hello, world!");
}

아마도 1.7 이상에서만 작동합니다.




입력 및 출력 스트림을 사용한 파일 읽기 및 쓰기 :

//Coded By Anurag Goel
//Reading And Writing Files
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


public class WriteAFile {
    public static void main(String args[]) {
        try {
            byte array [] = {'1','a','2','b','5'};
            OutputStream os = new FileOutputStream("test.txt");
            for(int x=0; x < array.length ; x++) {
                os.write( array[x] ); // Writes the bytes
            }
            os.close();

            InputStream is = new FileInputStream("test.txt");
            int size = is.available();

            for(int i=0; i< size; i++) {
                System.out.print((char)is.read() + " ");
            }
            is.close();
        } catch(IOException e) {
            System.out.print("Exception");
        }
    }
}



Java 7 이상을 사용해 볼 가치가 있습니다.

 Files.write(Paths.get("./output.txt"), "Information string herer".getBytes());

그것은 유망 해 보인다 ...




다음과 같은 간단한 방법이 있습니다.

File file = new File("filename.txt");
PrintWriter pw = new PrintWriter(file);

pw.write("The world I'm coming");
pw.close();

String write = "Hello World!";

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

fw.write(write);

fw.close();



Google의 Guava 라이브러리를 사용하여 매우 쉽게 파일을 만들고 쓸 수 있습니다.

package com.zetcode.writetofileex;

import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;

public class WriteToFileEx {

    public static void main(String[] args) throws IOException {

        String fileName = "fruits.txt";
        File file = new File(fileName);

        String content = "banana, orange, lemon, apple, plum";

        Files.write(content.getBytes(), file);
    }
}

이 예에서는 프로젝트 루트 디렉토리에 fruits.txt 파일을 새로 만듭니다.




가장 좋은 방법은 Java7을 사용하는 것입니다 : Java 7은 새로운 유틸리티 클래스 인 Files를 사용하여 파일 시스템 작업의 새로운 방식을 소개합니다. Files 클래스를 사용하여 파일과 디렉토리를 만들고 이동하고 복사하고 삭제할 수 있습니다. 또한 파일을 읽고 쓸 수 있습니다.

public void saveDataInFile(String data) throws IOException {
    Path path = Paths.get(fileName);
    byte[] strToBytes = data.getBytes();

    Files.write(path, strToBytes);
}

FileChannel으로 쓰기 대용량 파일을 처리하는 경우 FileChannel이 표준 IO보다 빠를 수 있습니다. 다음 코드는 FileChannel을 사용하여 String을 파일에 씁니다.

public void saveDataInFile(String data) 
  throws IOException {
    RandomAccessFile stream = new RandomAccessFile(fileName, "rw");
    FileChannel channel = stream.getChannel();
    byte[] strBytes = data.getBytes();
    ByteBuffer buffer = ByteBuffer.allocate(strBytes.length);
    buffer.put(strBytes);
    buffer.flip();
    channel.write(buffer);
    stream.close();
    channel.close();
}

DataOutputStream로 기입 해주세요.

public void saveDataInFile(String data) throws IOException {
    FileOutputStream fos = new FileOutputStream(fileName);
    DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos));
    outStream.writeUTF(data);
    outStream.close();
}

FileOutputStream로 쓰기

이제 FileOutputStream을 사용하여 바이너리 데이터를 파일에 쓸 수있는 방법을 살펴 보겠습니다. 다음 코드는 String int 바이트를 변환하고 FileOutputStream을 사용하여 파일에 바이트를 씁니다.

public void saveDataInFile(String data) throws IOException {
    FileOutputStream outputStream = new FileOutputStream(fileName);
    byte[] strToBytes = data.getBytes();
    outputStream.write(strToBytes);

    outputStream.close();
}

PrintWriter로 작성하면 PrintWriter를 사용하여 형식이 지정된 텍스트를 파일에 쓸 수 있습니다.

public void saveDataInFile() throws IOException {
    FileWriter fileWriter = new FileWriter(fileName);
    PrintWriter printWriter = new PrintWriter(fileWriter);
    printWriter.print("Some String");
    printWriter.printf("Product name is %s and its price is %d $", "iPhone", 1000);
    printWriter.close();
}

BufferedWriter로 쓰기 : BufferedWriter를 사용하여 String을 새 파일에 씁니다.

public void saveDataInFile(String data) throws IOException {
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
    writer.write(data);

    writer.close();
}

기존 파일에 문자열을 추가하십시오.

public void saveDataInFile(String data) throws IOException {
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
    writer.append(' ');
    writer.append(data);

    writer.close();
}



샘플 파일 만들기 :

try {
    File file = new File ("c:/new-file.txt");
    if(file.createNewFile()) {
        System.out.println("Successful created!");
    }
    else {
        System.out.println("Failed to create!");
    }
}
catch (IOException e) {
    e.printStackTrace();
}



Related


Tags

java   file-io