使用 FileWriter 和 FileReader 在Java中处理文件
Java FileWriter 和 FileReader 类用于从文本文件中写入和读取数据(它们是字符流类)。如果您必须读取和写入任何文本信息,建议不要使用 FileInputStream 和 FileOutputStream 类,因为它们是字节流类。
文件编写器
FileWriter 对于创建一个将字符写入其中的文件很有用。
- 此类继承自 OutputStream 类。
- 此类的构造函数假定默认字符编码和默认字节缓冲区大小是可以接受的。要自己指定这些值,请在 FileOutputStream 上构造一个 OutputStreamWriter。
- FileWriter 用于编写字符流。要写入原始字节流,请考虑使用 FileOutputStream。
- 如果输出文件不存在,FileWriter 将创建它。
构造函数:
- FileWriter(File file) –在给定 File 对象的情况下构造一个 FileWriter 对象。
- FileWriter (File file, boolean append) –在给定一个 File 对象的情况下构造一个 FileWriter 对象。
- FileWriter (FileDescriptor fd) –构造一个与文件描述符关联的 FileWriter 对象。
- FileWriter (String fileName) –构造一个给定文件名的 FileWriter 对象。
- FileWriter (String fileName, Boolean append) –在给定文件名的情况下构造一个 FileWriter 对象,该对象带有一个指示是否附加写入的数据的布尔值。
方法:
- public void write (int c) throws IOException –写入单个字符。
- public void write (char [] Stir) throws IOException –写入一个字符数组。
- public void write(String str)throws IOException –写入一个字符串。
- public void write(String str, int off, int len)throws IOException –写入字符串的一部分。这里 off 是开始写入字符的偏移量, len 是要写入的字符数。
- public void flush() throws IOException刷新流
- public void close() throws IOException先刷新流,然后关闭写入器。
读取和写入是逐字符进行的,这增加了 I/O 操作的数量并影响了系统的性能。 BufferedWriter可以与 FileWriter 一起使用,以提高执行速度。
以下程序描述了如何使用 FileWriter 创建文本文件
Java
// Creating a text File using FileWriter
import java.io.FileWriter;
import java.io.IOException;
class CreateFile
{
public static void main(String[] args) throws IOException
{
// Accept a string
String str = "File Handling in Java using "+
" FileWriter and FileReader";
// attach a file to FileWriter
FileWriter fw=new FileWriter("output.txt");
// read character wise from string and write
// into FileWriter
for (int i = 0; i < str.length(); i++)
fw.write(str.charAt(i));
System.out.println("Writing successful");
//close the file
fw.close();
}
}
Java
// Reading data from a file using FileReader
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
class ReadFile
{
public static void main(String[] args) throws IOException
{
// variable declaration
int ch;
// check if File exists or not
FileReader fr=null;
try
{
fr = new FileReader("text");
}
catch (FileNotFoundException fe)
{
System.out.println("File not found");
}
// read from FileReader till the end of file
while ((ch=fr.read())!=-1)
System.out.print((char)ch);
// close the file
fr.close();
}
}
文件阅读器
FileReader 对于从“文本”文件中读取字符形式的数据很有用。
- 该类继承自 InputStreamReader 类。
- 此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。要自己指定这些值,请在 FileInputStream 上构造 InputStreamReader。
- FileReader 用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream。
构造函数:
- FileReader(File file) –创建一个 FileReader ,给定要读取的文件
- FileReader(FileDescripter fd) –创建一个新的 FileReader ,给定要从中读取的 FileDescripter
- FileReader(String fileName) –给定要读取的文件名,创建一个新的 FileReader
方法:
- public int read () throws IOException –读取单个字符。此方法将阻塞,直到字符可用、发生 I/O 错误或到达流的末尾。
- public int read(char[] cbuff) throws IOException – 将字符读入数组。此方法将阻塞,直到某些输入可用、发生 I/O 错误或到达流的末尾。
- public abstract int read(char[] buff, int off, int len) throws IOException – 将字符读入数组的一部分。此方法将阻塞,直到某些输入可用、发生 I/O 错误或到达流的末尾。
参数:
cbuf - 目标缓冲区
off – 开始存储字符的偏移量
len - 要读取的最大字符数 - public void close() throws IOException关闭阅读器。
- public long skip(long n) throws IOException –跳过字符。此方法将阻塞,直到某些字符可用、发生 I/O 错误或到达流的末尾。
参数:
n – 要跳过的字符数
以下程序描述了如何使用 FileReader 从“文本”文件中读取
Java
// Reading data from a file using FileReader
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
class ReadFile
{
public static void main(String[] args) throws IOException
{
// variable declaration
int ch;
// check if File exists or not
FileReader fr=null;
try
{
fr = new FileReader("text");
}
catch (FileNotFoundException fe)
{
System.out.println("File not found");
}
// read from FileReader till the end of file
while ((ch=fr.read())!=-1)
System.out.print((char)ch);
// close the file
fr.close();
}
}