Java的输入输出流

来源:互联网 发布:南风知我意2书包网 编辑:程序博客网 时间:2024/05/20 09:43

今天进行的work都基本是在针对文件的读写问题,对几个常用的字节流和字符流等有了认识。

work_1是对比了filewriter和bufferedwriter,通过对比执行的时间可以看出来后者能快一点,是有缓冲的功能的作用吧

package Java的输入输出流;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/*用Filewriter直接往文件中写入10万个随机数*/public class work_1_Task1 {public static void main(String[] args) throws IOException{long time=System.currentTimeMillis();//获取开始时间//创建字符文件输出流FileWriter fw=new FileWriter("D:/A-大三-Java学习/task1.txt");for (int i=1;i<=10000;i++)fw.write((int)(Math.random()*10000)+"\t");fw.close();long t=System.currentTimeMillis()-time;System.out.println("Use time:"+t+"ms");FileReader fr=new FileReader("D:/A-大三-Java学习/Java的选择结构.txt");char[] data=new char[100000];//创建放内容的数组int num=fr.read(data);//读入数组内,返回长度String s=new String(data, 0, num);//将字符列表转换成字符串!System.out.println("Length:"+num);System.out.println(s);fr.close();}}
filewriter在获取得到文件后,用write向文件里面写东西,步骤简单,看起来也简单。

filereader在得到读取的文件后,用数组和字符串,来进行最后的输出。要知道read的返回值

package Java的输入输出流;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class work_1_Task2 {public static void main(String[] args) throws IOException {long time=System.currentTimeMillis();//使用BufferedWriter修饰FileWriter类,使其具有缓冲功能BufferedWriter bfw=new BufferedWriter(new FileWriter("D:/A-大三-Java学习/异常文件读取.txt"));for (int i=1;i<=10000;i++)bfw.write((int)(Math.random()*10000)+"\t");bfw.close();long t=System.currentTimeMillis()-time;System.out.println("Use time:"+t+"ms");//对比前一个,快了4ms//然而再次运行了好几次发现时间是变化的,但总得来说还是比filewriter能快BufferedReader brw=new BufferedReader(new FileReader("D:/A-大三-Java学习/task1.txt"));String l=null;while ((l=brw.readLine())!=null){System.out.println(l);}brw.close();}}
bufferedwriter和bufferedreader都是进行修饰的,在定义时就可以看到

不一样的是在读取文件内容的时候有所不一样,有readline()之后就不用进行的繁琐转化了。

咦,从这里反着推,是不是两个在写入的时候的差距就体现在这里呢?

work_2说是加行号,其实现在看来很像是复制文件内容呢。主要用的是buffered这一类输入输出流。

package Java的输入输出流;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/*给源程序每一行加上行号*/public class work_2_Task {public static void main(String[] args) throws IOException {File in=new File("D:/A-大三-Java学习/task1.txt");File out=new File("D:/A-大三-Java学习/temp.txt");BufferedReader bfr=new BufferedReader(new FileReader(in));BufferedWriter bfw=new BufferedWriter(new FileWriter(out));int i=0;//记录行号String s=null;while ((s=bfr.readLine())!=null){i++;bfw.write(i+""+s);bfw.newLine();}bfr.close();bfw.flush();bfw.close();System.out.println("Finish");}}
从一个文件里面读,读到的暂时放到s里,在让s写入到另一个里面。

work_3是统计英文短文里面字母A出现的次数,最最开始肯定会是想到循环判断什么的,当然这没错,所以就看怎么得到数据的问题。

package Java的输入输出流;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;/*统计英文中字母A出现的次数*/public class work_3_Task {public static void main(String[] args) throws IOException {long time=System.currentTimeMillis();String name="D:/A-大三-Java学习/poem.txt";FileInputStream f=new FileInputStream(name);int count=0;int c;while ((c=f.read())!=-1){//读不到字符时返回-1if (c=='A'||c=='a')count++;}f.close();System.out.println("诗中的A有:"+count+"个");time=System.currentTimeMillis()-time;System.out.println("统计的时间为:"+time+"ms");}}
而这里用到的是fileinputstream,读取字节流的方法,需要明白的就是read()读和读不到字符的返回值。

带有缓冲区的输入输出流来说,能减少磁盘的访问次数,提高文件的读取性能。

今晚无线网感人,反正以后还要再回来巩固,就这样。





0 0
原创粉丝点击