JavaIO FileReader和FileWriter

FileReader类能按字符读取流中数据

1.继承关系

Object--->Reader--->InputSteamReader--->FileReader

2.构造方法:

FileReader(File file);//使用File对象来创建FileReader对象
FileReader(FileDescriptor fd);
FileReader(String fileName); 

3.FileReader的方法全部都是从它的父类InputStreamReader继承的方法

(1)从InputStreamReader类继承的方法:

int read();//读取单个字符。
int read(char[] cbuf,int offset,int length);//将字符读入数组中的某一部分
boolean ready();判断此流是否已经准备好用于读取。
void close();//关闭文件
String getEncoding();//返回此流使用的字符编码的名称。 

FileWriter

FileWriter类能把字符直接写入流中,FileWriter继承与OutputStreamWriter,它的所有方法也都继承于OutputStreamWriter,

1.构造方法:

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) 
          根据给定的文件名以及指示是否追加加写入数据的 boolean 值来构造 FileWriter 对象。 

2.从OutputStreamWriter继承的方法:

void close() 
          关闭此流,但要先刷新它。 
void flush() 
          刷新该流的缓冲。 
String getEncoding() 
          返回此流使用的字符编码的名称。 
void write(char[] cbuf, int off, int len) 
          写入字符数组的某一部分。 
void write(int c) 
          写入单个字符。 
void write(String str, int off, int len) 
          写入字符串的某一部分。

读写实例:

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import com.lan.filepath.FilePath;

public class TestReaderWriter
{
	public static void main(String[] args) throws IOException
	{
		String packagePath=FilePath.getSrcPackagePath(TestReaderWriter.class);
		String fileName="testReaderWriter.txt";
		
		File file=new File(packagePath+fileName);
		if(!file.exists())
			file.createNewFile();
		FileWriter fileWriter=new FileWriter(file);
		//希尔字符串
		String text="窗前明月光,疑是地上霜。"
				+ "举头望明月,低头思故乡。";
		char[] cbuf=text.toCharArray();
		char ch='7';
		fileWriter.write(ch);
		fileWriter.write(cbuf);
		fileWriter.write(text);
		fileWriter.close();
		System.out.println("当前使用的编码是:"+fileWriter.getEncoding());
		System.out.println("------------------------");
		FileReader fileReader=new FileReader(file);
		char chtemp;
		String textTemp = "";
		chtemp=(char)fileReader.read();
		
		System.out.println(chtemp);
		int size=0;
		char[] cbuf1=new char[20];
		while((size=fileReader.read(cbuf1))!=-1)
		{
			textTemp+=new String(cbuf1);
		}
		System.out.println(textTemp);
		
		
	}
}

运行结果:

当前使用的编码是:null
------------------------
7
窗前明月光,疑是地上霜。举头望明月,低头思故乡。窗前明月光,疑是地上霜。举头望明月,低头思故乡。光,疑是地上霜。举头望明

文件testReaderWriter.txt中的内容:

7窗前明月光,疑是地上霜。举头望明月,低头思故乡。窗前明月光,疑是地上霜。举头望明月,低头思故乡。

FileReader,FileWriter使用起来与InputSteamReader,OutputSteamWriter都差不多。

FileReader与InputStreamReader

FileReader类与它的父类InputStreamReader的主要不同在于构造函数

InputStreamReader 是用来读取原始字节流,可指定编码格式,而FileReader是读取字符流,使用系统默认的编码格式。

FileReader:的构造函数:

FileReader(File file);//使用File对象来创建FileReader对象
FileReader(FileDescriptor fd);
FileReader(String fileName); 

InputStreamReader的构造函数:

InputStreamReader(InputStream in);//创建一个使用默认字符集的 InputStreamReader。 
InputStreamReader(InputStream in, Charset cs);//创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStream in, CharsetDecoder dec);//创建使用给定字符集解码器的 InputStreamReader。 
InputStreamReader(InputStream in, String charsetName);//创建使用指定字符集的 InputStreamReader。 
通过对比我们发现:

InputStreamReader 是用来读取原始字节流,然后把字节按编码转换成字符,可指定编码格式。而FileReader是读取字符流,使用系统默认的编码格式。

实例:FileReader来读取utf-8编码的文件(当前默认编码时gbk):

public static void printFileFileReader(String filePath) throws IOException
{
    FileReader fileReader=new FileReader(filePath);
    String textTemp = "";
    int size=0;
    char[] cbuf1=new char[20];
    while((size=fileReader.read(cbuf1))!=-1)
    {
        textTemp+=new String(cbuf1);
    }
    System.out.println(textTemp);
}

实例:InputStreamReader 来读取utf-8编码的文件(当前默认编码时gbk):

public static void printFileByInputStreamReader(String filePath,String charset) throws IOException
{
	InputStreamReader in=new InputStreamReader(
			new FileInputStream(filePath),charset);
	int result=0;
	while((result=in.read())!=-1)
	{
		System.out.print((char)result);
	}
}

testEncoding.txt文件内容:

静夜思
作者:李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。

运行结果:


可见FileReader是读取字符流使用的编码是系统默认的编码格式,如果编码不同的话,使用FileReader容易出现乱码问题。

而InputStramReader可以指定编码,容易解决乱码问题。


猜你喜欢

转载自blog.csdn.net/qq_21808961/article/details/80324951