betacode

Руководство Java FileWriter

  1. FileWriter
  2. Examples

1. FileWriter

FileWriter - это подкласс OutputStreamWriter, используемый для записи текстовых файлов.
FileWriter не имеет других методов, кроме тех, которые унаследованы от OutputStreamWriter. На самом деле вы можете использовать OutputStreamWriter для записи символов для любой цели. Однако FileWriter специально разработан для записи символов в системный файл.
FileWriter​ constructors
FileWriter​(File file)     
 
FileWriter​(FileDescriptor fd)     

FileWriter​(File file, boolean append)     

FileWriter​(File file, Charset charset)     

FileWriter​(File file, Charset charset, boolean append)     
 
FileWriter​(String fileName)     

FileWriter​(String fileName, boolean append)     

FileWriter​(String fileName, Charset charset)     

FileWriter​(String fileName, Charset charset, boolean append)
Примечание: Конструкторы с параметром Charset были добавлены в FileWriter, начиная с версии Java 11. Поэтому, если вы используете раннюю версию Java и хотите написать файл с указанной кодировкой (encoding), используйте класс OutputStreamWriter для замены.

2. Examples

FileWriterEx1.java
package org.o7planning.filewriter.ex;

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

public class FileWriterEx1 {

    public static void main(String[] args) throws IOException {
        // Windows: C:/SomeFolder/out-file.txt
        File outFile = new File("/Volumes/Data/test/out-file.txt");
        
        outFile.getParentFile().mkdirs();
        
        FileWriter fileWriter = new FileWriter(outFile);
        
        System.out.println("Writer file: " + outFile.getAbsolutePath());
        System.out.println("With encoding: " + fileWriter.getEncoding());

        fileWriter.write("Line 1");
        fileWriter.write("\n");
        fileWriter.write("Line 2");
        fileWriter.write("\n");
        fileWriter.write("Line 3");

        fileWriter.close();
    }
}
Output:
out-file.txt
Line 1
Line 2
Line 3
FileWriter также позволяет добавлять данные в существующий файл, если файл не существует, он будет создан.
FileWriterEx2.java
package org.o7planning.filewriter.ex;

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

public class FileWriterEx2 {

    public static void main(String[] args) throws IOException {
        // Windows: C:/SomeFolder/out-file.txt
        File outFile = new File("/Volumes/Data/test/out-file.txt");
        
        outFile.getParentFile().mkdirs();
        
        // FileWriter(File outFile, boolean append)
        FileWriter fileWriter = new FileWriter(outFile, true);
        
        System.out.println("Writer file: " + outFile.getAbsolutePath());
        System.out.println("With encoding: " + fileWriter.getEncoding());

        fileWriter.write("Line 4");
        fileWriter.write("\n");
        fileWriter.append("Line 5").append("\n");
        fileWriter.close();
    }
}
Например, используйте FileWriter для записи файла с кодировкой UTF-16, а затем прочитайте файл с помощью FileInputStream для просмотра bytes в файле.
FileWriter_UTF16_Ex1.java
package org.o7planning.filewriter.ex;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class FileWriter_UTF16_Ex1 {
    // Windows: C:/SomeFolder/out-utf16-file.txt
    private static final String filePath = "/Volumes/Data/test/out-utf16-file.txt";

    public static void main(String[] args) throws IOException {
        System.out.println("--- Write UTF-16 File ---");
        write_UTF16_File();
        
        System.out.println("--- Read File as Binary Stream ---");
        readAsInputStream();
    }

    private static void write_UTF16_File() throws IOException {
        File outFile = new File(filePath);
        outFile.getParentFile().mkdirs();

        // FileWriter(File outFile, boolean append)
        FileWriter fileWriter = new FileWriter(outFile, StandardCharsets.UTF_16);
        fileWriter.write("JP日本-八洲");
        fileWriter.close();
    }

    private static void readAsInputStream() throws IOException {
        File file = new File(filePath);

        FileInputStream fis = new FileInputStream(file);

        int byteCode;
        while ((byteCode = fis.read()) != -1) {
            System.out.println((char) byteCode + " " + byteCode);
        }
        fis.close();
    }
}
Output:
--- Write UTF-16 File ---
--- Read File as Binary Stream ---
þ 254
ÿ 255
0
J 74
0
P 80
e 101
å 229
g 103
, 44
0
- 45
Q 81
k 107
m 109
2 50
Ниже приведена иллюстрация bytes на FileWriter и bytes в файле, только что написанном FileWriter:
Первые два bytes (254, 255) в файле UTF-16 используются для обозначения того, что он запускает данные в кодировке UTF-16.
Ознакомьтесь с моими статьями о InputStreamReader и OutputStreamWriter, чтобы узнать больше о том, как Java читает и записывает кодировки UTF-16 и UTF-8.

Руководства Java IO

Show More