I/O4——FileReader和FileWriter类

前一篇博文讲述了FileInputStream类从文件读出信息,FileOutputStream类向文件写入信息,但是存在一点不足,即这两个类都只是提供了对字节或字节数组的读取方法。由于汉字在文件中占用两个字节,如果使用字节流,读取不好可能会出现乱码现象,此时采用字符流Reader或Writer类即可避免这种现象。

FileReader和FileWriter字符流对应了FileInputStream和FileOutputStream类。FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭。

了解FileReader类详细信息——点击打开链接

了解FileWriter类详细信息——点击打开链接


FileWriter类

package FileIO;

import java.io.*;
import java.util.*;

public class WriterDemo {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
File file=null;//文件
FileWriter fw=null;//字符输出流
try{
file=new File("demo.txt");
fw=new FileWriter(file);//如果有这个文件,则会覆盖,没有则创建
//fw=new FileWriter(file,true)//存在这个文件,在文件信息后追加内容
System.out.println("请输入内容,并请输入over后结束:");
String str=null;//实例化一个字符串对象,用来接收输入的内容
char[]buf=new char[1024];//定义缓冲区大小
do{
str=scan.nextLine();//接收输入信息
buf=str.toCharArray();//将字符串转换为字符数组
fw.write(buf);//将字符数组写入输出流
fw.flush();//刷新流
}while(!str.equals("over"));
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(fw!=null){
fw.close();//关闭流
}
}catch(IOException e){
e.printStackTrace();
}
}
System.out.println("写入操作结束!");
}

FileReader类

(1)单个字符的读取

(2)数组方式读取(推荐使用)

package FileIO;
import java.io.*;
import java.util.*;

public class FileReaderDemo {

public static void main(String[] args) {
int b;
Scanner scan=new Scanner(System.in);
System.out.println("选择读取方式(字符数组读取为1,字符读取为0:)");
b=scan.nextInt();
if(b==1){
CharArrayTest();
}
else{
CharTest();
}
}


//通过字符数组读取
public static void CharArrayTest(){
File file=null;//创建文件对象
FileReader fr=null;//创建FileReader对象

try{
file=new File("demo.txt");
fr=new FileReader(file);

char []buf=new char[1024];//接收读出内容数组,一般都定义为1024的整数倍
int len=0;//接收读出内容
while((len=fr.read(buf))!=-1){//读取内容到字符数组
System.out.println(new String(buf,0,len));//读出多少就输出多少
}

}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(fr!=null){
fr.close();//关闭流
}
}catch(Exception e){
e.printStackTrace();
}
}
}

//单个字符的读取
public static void CharTest(){
File file=null;//创建文件对象
FileReader fr=null;//创建FileReader对象

try{
file=new File("demo.txt");
fr=new FileReader(file);
int len=0;//接收读出内容
while((len=fr.read())!=-1){
System.out.println("这个字符"+(char)len+" "+"的Unicode值为:"+len);
}

}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(fr!=null){
fr.close();//关闭流
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}

(3)FileWriter类和FileReader类的完整使用实例

package FileIO;
import java.io.*;
import java.util.*;
public class FileWriterAndFileReader {

public static void main(String[] args) {
File file=new File("test.txt");
Output(file);
Input(file);
}

//写入文件
private static void Output(File file){
FileWriter fw=null;
Scanner scan=new Scanner(System.in);
try{
fw=new FileWriter(file,true);
System.out.println("请输入要写的内容,输入over结束:");
String str=null;
char[]buf=new char[1024];
do{
str=scan.nextLine();
buf=str.toCharArray();
fw.write(buf,0,buf.length);
}while(!str.endsWith("over"));
}catch(IOException e){
e.printStackTrace();
}finally{
if(fw!=null){
try{
fw.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}

//读出文件
private static void Input(File file){
FileReader fr=null;
try{
fr=new FileReader(file);
char[]buf=new char[1024];
int len=0;
while((len=fr.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
}catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}finally{
if(fr!=null){
try{
fr.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值