java io类filereader_java基础知识回顾之javaIO类---FileWriter和FileReader

FileWriter类的构造方法定义如下:

1.public FileWriter(File file)throws IOException

字符流的操作比字节流操作好在一点,就是可以直接输出字符串了,不用再像之前那样进行转换操作了。

packagecom.lp.ecjtu;importjava.io.FileWriter;importjava.io.IOException;public classFileWriterDemo {/*** 字符流,创建一个FileWriter对象,该对象一被初始化,就必须明确操作的文件,将

*@paramargs

*@throwsIOException*/

public static void main(String[] args) throwsIOException {//TODO Auto-generated method stub//而且该文件被创建到指定目录下,如果该目录下面已经有同名的文件,将被覆盖

FileWriter fw = new FileWriter("Demo.txt");//调用write方法,将字符串写入到流当中去,也就是缓冲区中

fw.write("abcefg");//刷新流对象中的缓冲中的数据//将数据刷到指定的文件当中去

fw.flush();

//fw.close();//如果用close,则流关闭,后面的写入流将不会被执行

fw.write("3423");

fw.flush();

}

}

输出结果:

在Demo.txt文件中写入了:abcefg3423

2.public FileWriter(File file,boolean append)throws IOException 用FileWriter的另一种构造方法,传递一个true参数,代表不覆盖已有的文件。并在已有文件进行续写

packagecom.lp.ecjtu;importjava.io.FileWriter;importjava.io.IOException;/*** 对已有文件的续写

*@authorAdministrator

**/

public classFileWriterDemoApend {/*** 创建一个FileWriter对象,该对象一被初始化,就必须明确操作的文件

*@paramargs

*@throwsIOException

*@throwsIOException*/

public static voidmain(String[] args){

FileWriter fw= null;try{//用FileWriter的另一种构造方法,传递一个true参数,代表不覆盖已有的文件。并在已有文件进行续写

fw = new FileWriter("Demo.txt",true);//调用write方法,将字符串写入到流当中去,也就是缓冲区中

fw.write("234334\r\n谢谢");

}catch(IOException e) {

e.printStackTrace();

}finally{try{if(fw != null){

fw.close();

}

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

输出结果:在文件中续写字符串:

结果变为

abcefg3423234334

谢谢

FileReader的构造方法定义如下:

public FileReader(File file)throws FileNotFoundException

String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。

例子:一个字符一个字符读取文件:

packagecom.lp.ecjtu;importjava.io.FileReader;importjava.io.IOException;public classFileReaderDemo {/*** 怎样去捕获IO异常,标准的捕获异常方式

* 下面的1,2,3都会抛出异常,可能发生的异常有下面三个:

* 1.java.io.FileNotFoundException //关联的文件不存在

* 2.java.lang.NullPointerException //FileReader可能没有new

* 3.IOException //操作IO流的时候抛出的异常*/

public static voidmain(String[] args) {//创建一个文件读取流对象,和指定的名称的文件相关联//要保证该文件是已经存在的,如果不存在,会发生FileNotFoundException

FileReader fr = null;try{

fr= new FileReader("Demo.txt");//一次读取一个字符,而且会自动往下读

/*int char1 = fr.read();

System.out.println("char1="+(char)char1);//char1=a

int char2 = fr.read();

System.out.println("char2="+(char)char2);//char2=b

int char3 = fr.read();

System.out.println("char3="+(char)char3);//char3=c

int char4 = fr.read();

System.out.println("char4="+(char)char4);//char4=e

int char5 = fr.read();

System.out.println("char5="+(char)char5);

int char6 = fr.read();

System.out.println("char6="+(char)char6);

int char7 = fr.read();

System.out.println("char7="+char7);*/

//如果达到流的末尾,则返回-1,-1为数据的分割符

int ch = 0;while((ch=fr.read())!= -1){

System.out.print((char)ch);

}

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{if(fr != null){try{

fr.close();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

输出结果:

abcefg3423234334

谢谢

以字符数组的形式读取:

使用:

public int read(char[] cbuf)

throws IOException

packagecom.lp.ecjtu;importjava.io.FileReader;importjava.io.IOException;public classFileReaderDemo2 {/***@paramargs*/

public static void main(String[] args) throwsIOException{//创建一个文件读取流对象,和指定的名称的文件相关联//要保证该文件是已经存在的,如果不存在,会发生FileNotFoundException

FileReader fr = new FileReader("Demo2.txt");//定义一个字符数组,用于存储读到的字符//char[] ch = new char[1024];//返回读到的字符个数//每次读3字符个放到字符数组缓冲区当中,一次性存储3个放到数组当中,然后在一次性读取出来

char[] ch = new char[3];int num =fr.read(ch);

System.out.println("num="+num+"----"+newString(ch));int num1 =fr.read(ch);

System.out.println("num1="+num1+"----"+newString(ch));int num2 =fr.read(ch);

System.out.println("num2="+num2+"----"+newString(ch));int num3 =fr.read(ch);

System.out.println("num3="+num3+"----"+newString(ch));int nu = 0;while((nu=fr.read(ch)) !=-1){

System.out.println(new String(ch,0,nu));

}

fr.close();

}

}

输出:demo2中存储的字符为:abcdefg

num=3----abc

num1=3----def

num2=1----gef

num3=-1----gef

以字符数组的的形式循环读取java文件

packagecom.lp.ecjtu;importjava.io.FileReader;importjava.io.IOException;public classFileReaderJava {/***@paramargs

* 读取一个java文件,并且打印到控制台上*/

public static void main(String[] args) throwsIOException{//创建一个文件读取流对象,和指定的名称的文件相关联//要保证该文件是已经存在的,如果不存在,会发生FileNotFoundException

FileReader fr = new FileReader("FileReaderDemo.java");//定义一个字符数组,用于存储读到的字符

char[] ch = new char[1024];//返回读到的字符个数

int num= 0;while((num=fr.read(ch)) !=-1){

System.out.print(new String(ch,0,num));

}

fr.close();

}

}

文件的复制:将一个盘的文件复制到另一个盘:

packagecom.lp.ecjtu;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;public classCopyTest {/**将C盘一个文本文件复制到D盘

*@paramargs

* 原理:其实就是将C盘下的文件数据存储到D盘的文件当中

* 步骤:

* 1.在D盘创建一个文件,用于存储C盘文件的数据

* 2.定义读取流和C盘文件相关联

* 3.通过不断的读写完成数据的存储

* 4.关闭资源

*@throwsIOException*/

public static void copy1() throwsIOException{//创建要写出到哪个文件,也就是目的地:为硬盘文件

FileWriter fw = new FileWriter("testjava.txt");//与要拷贝的文件关联,也就是读取要拷贝的文件 源:为硬盘文件

FileReader fr = new FileReader("FileReaderDemo.java");int ch=0;//从c盘 读一个,就往D盘复制一个

while((ch = fr.read())!= -1){

fw.write(ch);

}

fw.close();

fr.close();

}/*** 写入数组缓存中,一次读出,一次性写入

*@paramargs

*@throwsIOException*/

public static voidcopy2(){

FileWriter fw= null;

FileReader fr= null;try{

fw= new FileWriter("test2.txt");

fr= new FileReader("FileReaderDemo.java");char[] buf = new char[1024];int len = 0;//表示buf数组的长度

while((len = fr.read(buf))!=-1){

fw.write(buf,0,len);

System.out.println(buf);

}

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if(fw != null){

fw.close();

}

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}try{if(fr != null){

fr.close();

}

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}public static void main(String[] args) throwsIOException {

copy1();

copy2();

}

}

总结:copy1的效率低于copy2,因为copy2一次性把数组复制到数组缓冲区,然后在写入流中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值