📜  Java中的FileWriter类

📅  最后修改于: 2022-05-13 01:55:29.233000             🧑  作者: Mango

Java中的FileWriter类

Java .io 包的Java FileWriter类用于将字符形式的数据写入文件。

  • 该类继承自 OutputStreamWriter 类,后者又继承自 Writer 类。
  • 此类的构造函数假定默认字符编码和默认字节缓冲区大小是可接受的。要自己指定这些值,请在 FileOutputStream 上构造一个 OutputStreamWriter。
  • FileWriter 用于写入字符流。要写入原始字节流,请考虑使用 FileOutputStream。
  • 如果文件不存在,则 FileWriter 创建输出文件。

FileWriter 的层次结构

FileWriter 的层次结构

FileWriter 扩展了 OutputStreamWriter 和 Writer 类。它实现了 Closeable、Flushable、Appendable、AutoCloseable 接口。

FileWriter 的构造函数

1. FileWriter(File file):给定一个File对象构造一个FileWriter对象。如果文件存在但它是一个目录而不是常规文件,或者不存在但无法创建,或者由于任何其他原因无法打开,它会抛出IOException

2. FileWriter(File file, boolean append):给定一个File对象构造一个FileWriter对象。如果第二个参数为真,则字节将写入文件的末尾而不是开头。如果文件存在但它是一个目录而不是常规文件,或者不存在但无法创建,或者由于任何其他原因无法打开,它会抛出IOException

3. FileWriter(FileDescriptor fd):构造一个与文件描述符关联的FileWriter对象。

4. FileWriter(File file, Charset charset):在给定文件和字符集时构造fileWriter。

5. FileWriter(File file, Charset charset, boolean append):当给定文件和字符集时构造fileWriter,并用一个布尔值指示是否追加写入的数据。

6. FileWriter(String fileName):构造一个给定文件名的 FileWriter 对象。

7. FileWriter(String fileName, Boolean append):构造一个给定文件名的 FileWriter 对象,布尔值指示是否附加写入的数据。

8. FileWriter(String fileName, Charset charset):当给定文件名和字符集时构造一个FileWriter。

9. FileWriter(String fileName, Charset charset, boolean append):当给定文件名和字符集以及指示是否追加数据的布尔变量时构造一个fileWriter。

宣言

public class FileWriter extends OutputStreamWriter  

例子

Java
// Java program to create a text File using FileWriter
  
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
class GFG {
    public static void main(String[] args)
        throws IOException
    {
        // initialize a string
        String str = "ABC";
        try {
  
            // attach a file to FileWriter
            FileWriter fw
                = new FileWriter("D:/data/file.txt");
  
            // read each character from string and write
            // into FileWriter
            for (int i = 0; i < str.length(); i++)
                fw.write(str.charAt(i));
  
            System.out.println("Successfully written");
  
            // close the file
            fw.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}


Java
// Java program to write text to file
  
import java.io.FileWriter;
  
public class GFG {
  
    public static void main(String args[])
    {
  
        String data = "Welcome to gfg";
  
        try {
            // Creates a FileWriter
            FileWriter output
                = new FileWriter("output.txt");
  
            // Writes the string to the file
            output.write(data);
  
            // Closes the writer
            output.close();
        }
  
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}


Java
// java program to show the usage
// of getEncoding() function
  
import java.io.FileWriter;
import java.nio.charset.Charset;
  
class Main {
    public static void main(String[] args)
    {
  
        String file = "output.txt";
  
        try {
            // Creates a FileReader with default encoding
            FileWriter o1 = new FileWriter(file);
  
            // Creates a FileReader specifying the encoding
            FileWriter o2 = new FileWriter(
                file, Charset.forName("UTF11"));
  
            // Returns the character encoding of the reader
            System.out.println("Character encoding of o1: "
                               + o1.getEncoding());
            System.out.println("Character encoding of o2: "
                               + o2.getEncoding());
  
            // Closes the reader
            o1.close();
            o2.close();
        }
  
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}


将 ABC 字符串写入文件

覆盖与附加文件:

在创建Java FileWriter 时,我们可以决定是要将文件附加到现有文件,还是要覆盖任何现有文件。这可以通过选择合适的构造函数来决定。覆盖任何现有文件的构造函数只需要一个参数,即文件名。

Writer fileWriter = new FileWriter("c:\\data\\output.txt");

附加文件或覆盖文件的构造函数,有两个参数,文件名和一个布尔变量,决定是附加还是覆盖文件

基本方法

1.写()

  1. write(int a):此方法写入由 int a 指定的单个字符。
  2. write(String str, int pos, int length):此方法从位置pos写入字符串的一部分,直到长度为字符数。
  3. write(char ch[], int pos, int length):此方法从位置pos长度字符的位置。
  4. write(char ch[]):此方法写入由 ch[] 指定的字符数组。
  5. write(String st):此方法将 'st' 指定的字符串值写入文件。

Java

// Java program to write text to file
  
import java.io.FileWriter;
  
public class GFG {
  
    public static void main(String args[])
    {
  
        String data = "Welcome to gfg";
  
        try {
            // Creates a FileWriter
            FileWriter output
                = new FileWriter("output.txt");
  
            // Writes the string to the file
            output.write(data);
  
            // Closes the writer
            output.close();
        }
  
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

2.getEncoding()

此方法用于获取用于写入数据的编码类型。

Java

// java program to show the usage
// of getEncoding() function
  
import java.io.FileWriter;
import java.nio.charset.Charset;
  
class Main {
    public static void main(String[] args)
    {
  
        String file = "output.txt";
  
        try {
            // Creates a FileReader with default encoding
            FileWriter o1 = new FileWriter(file);
  
            // Creates a FileReader specifying the encoding
            FileWriter o2 = new FileWriter(
                file, Charset.forName("UTF11"));
  
            // Returns the character encoding of the reader
            System.out.println("Character encoding of o1: "
                               + o1.getEncoding());
            System.out.println("Character encoding of o2: "
                               + o2.getEncoding());
  
            // Closes the reader
            o1.close();
            o2.close();
        }
  
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

输出:

The character encoding of output1: Cp1253
The character encoding of output2: UTF11

在上面的示例中,我们创建了 2 个名为 output1 和 output2 的文件编写器。

  1. output1:不指定字符编码。因此,getEncoding() 方法返回默认字符编码。
  2. output2:指定字符编码, UTF11 。因此,getEncoding() 方法返回指定的字符编码。

3.关闭()方法:

完成向 FileWriter 写入字符后,我们应该关闭它。这是通过调用 close() 方法完成的。

try {
     // Creates a FileReader with default encoding
     FileWriter o1 = new FileWriter(file);

     // Creates a FileReader specifying the encoding
     FileWriter o2 = new FileWriter(file, Charset.forName("UTF11"));

     // Returns the character encoding of the reader
     System.out.println("Character encoding of o1: " + o1.getEncoding());
     System.out.println("Character encoding of o2: " + o2.getEncoding());

     // Closes the FileWriter
     o1.close();
     o2.close();
   }

FileWriter 与 FileOutputStream

  • FileWriter 写入字符流,而 FileOutputStream 用于写入原始字节流。
  • FileWriter 处理 16 位字符,而 FileOutputStream 处理 8 位字节。
  • FileWriter 处理 Unicode字符串,而 FileOutputStream 将字节写入文件,它不接受字符或字符串,因此为了接受字符串,它需要用 OutputStreamWriter 包装。

FileWriter 的方法

Method                                         

Description                                                                                           
void write(String text)It is used to write the string into FileWriter.
void write(char c)It is used to write the char into FileWriter.
void write(char[] c)It is used to write a char array into FileWriter.
void flush()It is used to flushes the data of FileWriter.
void close()It is used to close the FileWriter.

OutputStreamWriter 的方法

Method                                                      Description                                                                                           
flush()Flushes the stream.
getEncoding()Returns the name of the character encoding being used by this stream.
write​(char[] cbuf, int off, int len)Writes a portion of an array of characters.
write​(int c)Writes a single character.
write​(String str, int off, int len)Writes a portion of a string.

作家的方法

Method                                                      

Description                                                                                           
append​(char c)Appends the specified character to this writer.
append​(CharSequence csq)Appends the specified character sequence to this writer.
append​(CharSequence csq, int start, int end)Appends a subsequence of the specified character sequence to this writer.
close()Closes the stream, flushing it first.
nullWriter()Returns a new Writer which discards all characters.
write​(char[] cbuf)Writes an array of characters.
write​(String str)Writes a string.