(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<sum;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<sum;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("打开文件失败,程序停止运行~");
}
}
}