实验七 输入输出

(1.分别使用FileWriter和BufferedWriter往文件中写入随机整数,比较用时的多少。再用FileReader和BufferedReader读取写入的文件,比较用时多少。

要求:分别用FileWriter和BufferedWriter往文件中写入相同数量的随机数,根据写入数据数量的不同,计算所需的时间,并画出写入数据量和所消耗时间关系曲线图。再用FileReader和BufferedReader,将不同的数据量读入程序中,并统计所消耗时间的多少。

提示:可以使用System.currentTimeMillis

()方法获取当前的毫秒数,也可以使用Clock.systemUTC().millis()获取。

关系图


结果
结果


File_Write.java

package shiyan7_1;

import java.io.*;

public class File_Writer {

       public static void main(String[] args) throws IOException{

              long time= System.currentTimeMillis();//当前时间

              Filefile = new File("text.txt");

    //创建文件

    file.createNewFile();

    //

creates a FileWriter Object

    FileWriterwriter = new FileWriter(file);

    //向文件写入内容

   int number;

   int sum=100000;

   for(int i=0;i

       number = (int)Math.round(Math.random());//random() 方法可返回介于 0 ~ 1 之间的一个随机数。

       //System.out.println(number);

       writer.write(number + " ");

   }

   writer.close();

   time= System.currentTimeMillis() -time;

   System.out.println("使用FileWriter 写入"+sum+"个随机数用时为:"+ time + "微秒") ;

   time= System.currentTimeMillis();//当前时间

   FileReaderfr = new FileReader(file);

   char[] a = new char[sum];

   fr.read(a); // 读取text中的内容

   fr.close();

   time= System.currentTimeMillis() -time;

   System.out.println("使用FileWriter 读出"+sum+"个随机数用时为:"+ time + "微秒") ;

       }

       }     


Buffered_Writer.java

package shiyan7_1;

import java.io.*;

public class Buffered_Writer {

/*

 *  首先,如果要使用BufferedWriter,一定会要用到FileWriter

 *使用的BufferedWriter的效率要比FileWriter高很多

 * FileWriter out = new FileWriter(file); //文件写入流

   BufferedWriterbw=newBufferedWriter(out);

 */

       public static void main(String[] args) throws IOException {

              long time= System.currentTimeMillis();//当前时间

               //创建文件

              FileWriterout = new FileWriter("text.txt");

    //

creates a BufferedWriter Object

              BufferedWriterbufferedwriter = new BufferedWriter(out);

    //向文件写入内容

   int number;

   int sum=100000;

   for(int i=0;i

       number = (int)Math.round(Math.random());;

       bufferedwriter.write(number + " ");

   }

   bufferedwriter.close();

   time= System.currentTimeMillis() -time;

   System.out.println("使用BufferedWriter 写入"+sum+"个随机数用时为:"+ time + "微秒") ;

   time= System.currentTimeMillis();//当前时间

   BufferedReaderfr= new BufferedReader(newFileReader("text.txt"));

   char[] a = new char[sum];

   fr.read(a); // 读取text中的内容

   fr.close();

   time= System.currentTimeMillis() -time;

   System.out.println("使用BufferedWriter 读出"+sum+"个随机数用时为:"+ time + "微秒") ;

       }

}

3.从文件读取一篇英语文章,然后统计26个英文字母出现的频率。

要求:

1. 假设某个字母a出现的次数为m,总共的字母数为n,则字母a出现的频率为m/n。

2. 按26个字母的顺序打印出每个字母出现的频率。

3. 用于统计频率的类LetterFrequencyCount:

实现boolean loadFile(File file)方法或者boolean loadFile(String filename)方法来实现读取文件,并计算好字母出现的频率,并返回打开文件成功与否。

实现double getFrequency(char a)方法来获取某个字母出现的频率。

实现void printFrequencies()方法来将所有字母出现的频率打印出来。打印格式:A: 20%。

提示:

1. 大小写字母算同一个字母。

2. 有些字母不会出现。

3. 文件可能为空或者完全没有英文字母。

4. 每行打印一个字母的出现频率,字母出现频率打印为百分比。

5. 命令行指定的文件可能不存在。



LetterFrequencyCount.java

package shiyan7_2;

import java.io.*;

public class LetterFrequencyCount {

        private int[] b = new int[300];

        private double sum =0;

       publicLetterFrequencyCount() {

              for(int i=65;i<=122;i++){

                     b[i]=0;

              }

       }

       publicBooleanloadFile(Filefile) throws IOException{

                     jisuan(file);

                     returnfile.exists();

       }

       public void jisuan(File file) throwsIOException{

              FileReaderfr = new FileReader(file);

    char[] a = new char[200000];

    fr.read(a); // 读取数组中的内容

    for (char c : a){

     //System.out.print(c); // 一个一个打印字符

     if(c>='A'&&c<='z'){

            b[(int)c]++;

            sum++;

     }else{

            continue;

     }

    }  

    fr.close();

       }

       public double getFrequency(char a){

              int x=(int)a;

              if(x>=90){

                     x-=32;

              }else{

              }

              if(sum==0)

                     return 0;

              else

              return (b[x]+b[x+32])/sum;

       }

       public void printFrequencies(){

              for(int i=65;i<=90;i++){

                     System.out.println((char)i+"/"+(char)(i+32)+"="+getFrequency((char)i)*100.0+"%");

              }

       }

}

Test.java

package shiyan7_2;

import java.io.*;

import java.util.Scanner;

public class Test {

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

              Filefile = new File("text.txt");

              LetterFrequencyCountfr = new LetterFrequencyCount();

              if(fr.loadFile(file)){

                     System.out.println("打开文件成功~");

                            System.out.println("输入查询的字母");

                            Scannerscan = new Scanner(System.in);

        char c = 'a';

        Stringstr1 = scan.next();

        c =str1.charAt(0);

        scan.close();

                            System.out.println(c+"的频率="+fr.getFrequency(c)*100+"%");

                            System.out.println("所有的字母频率");

                            fr.printFrequencies();

              }else{

                     System.out.println("打开文件失败,程序停止运行~");

              }

       }

}

你可能感兴趣的:(实验七 输入输出)