(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 + "微秒") ; } } 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. 命令行指定的文件可能不存在。 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+"%"); } } } 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("打开文件失败,程序停止运行~"); } } }Buffered_Writer.java
LetterFrequencyCount.javaTest.java