Java实验(七)

版权声明:本文为Trinity原创文章,未经Trinity允许不得转载 https://blog.csdn.net/Caoyang_He/article/details/83451038

(1)分别使用FileWriter和BufferedWriter往文件中写入随机整数,比较用时的多少。再用FileReader和BufferedReader读取写入的文件,比较用时多少。
要求:分别用FileWriter和BufferedWriter往文件中写入相同数量的随机数,根据写入数据数量的不同,计算所需的时间,并画出写入数据量和所消耗时间关系曲线图。再用FileReader和BufferedReader,将不同的数据量读入程序中,并统计所消耗时间的多少。
提示:可以使用System.currentTimeMillis ()方法获取当前的毫秒数,也可以使用Clock.systemUTC().millis()获取。
test1.java

package tes7;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.util.Random;

public class test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try 
		{
		      //创建一个FileWriter对象
				long t =  System.currentTimeMillis ();
			   FileWriter  fw=new FileWriter("c:\\test.txt"); 
		      //写入信息
			   for(int i =0;i<1000000;i++)
			   {
				   Random r= new Random();
				   int k = r.nextInt(10);
				   fw.write(k);
				   fw.flush();  //刷新缓冲区 
			   }  
			   fw.close();
			   System.out.println(System.currentTimeMillis ()-t);
		}
		catch(IOException e)
		{
		      System.out.println("文件不存在!");
		}
		
		try 
		{
		      //创建一个FileWriter对象
				long t =  System.currentTimeMillis ();
			   FileWriter  fw=new FileWriter("c:\\test1.txt"); 
			   BufferedWriter bw=new  BufferedWriter(fw);
		      //写入信息
			   for(int i =0;i<1000000;i++)
			   {
				   Random r= new Random();
				   int k = r.nextInt(10);
				   bw.write(k);
				   bw.flush();  //刷新缓冲区 
			   }  
			   fw.close();
			   System.out.println(System.currentTimeMillis ()-t);
		}
		catch(IOException e)
		{
		      System.out.println("文件不存在!");
		}
		
		Reader fr=null;
		StringBuffer sbf=null;
		try {
				long t =  System.currentTimeMillis ();
		      fr = new FileReader("c:\\test.txt");
		      char ch[]=new char[100];  //创建字符数组作为中转站
		      sbf=new StringBuffer();
		      int length=fr.read(ch);  //将字符读入数组
		      while ((length!= -1)) 
		      {//循环读取并追加字符
		            sbf.append(ch);   //追加到字符串
		            length=fr.read();
		      }
		      fr.close();
		      System.out.println(System.currentTimeMillis ()-t);
		}
		catch(IOException e)
		{
		      System.out.println("文件不存在!");
		}
		        
		
		try {
			long t =  System.currentTimeMillis ();
	      fr = new FileReader("c:\\test.txt");
	      BufferedReader br=new BufferedReader(fr);
	      char ch[]=new char[100];  //创建字符数组作为中转站
	      sbf=new StringBuffer();
	      int length=br.read(ch);  //将字符读入数组
	      while ((length!= -1)) 
	      {//循环读取并追加字符
	            sbf.append(ch);   //追加到字符串
	            length=br.read();
	      }
	      br.close();
	      fr.close();
	      System.out.println(System.currentTimeMillis ()-t);
		}
		catch(IOException e)
		{
		      System.out.println("文件不存在!");
		}
	}

}

(2)从文件读取一篇英语文章,然后统计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%。
    提示:
  4. 大小写字母算同一个字母。
  5. 有些字母不会出现。
  6. 文件可能为空或者完全没有英文字母。
  7. 每行打印一个字母的出现频率,字母出现频率打印为百分比。
  8. 命令行指定的文件可能不存在。

LetterFrequencyCount.java

package tes7;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class LetterFrequencyCount {
	private Reader fr;
	private StringBuffer sbf=null;
	private int sumnumber = 0;
	private int[] Chars = new int[26];
	
	public boolean loadFile(String filename)
	{
		try
		{
			fr = new FileReader(filename);
			char ch[]=new char[100];  //创建字符数组作为中转站
		    sbf=new StringBuffer();
		    int length=fr.read(ch);  //将字符读入数组
		    while ((length!= -1)) 
		      {//循环读取并追加字符
		            sbf.append(ch);   //追加到字符串
		            length=fr.read();
		      }
		      fr.close();
		      		      
	      for(int i= 0;i<sbf.length();i++)
			{
				if((int)(sbf.charAt(i))>=65&&(int)(sbf.charAt(i))<=90)
				{
					this.sumnumber++;
					this.Chars[(int)(sbf.charAt(i)-65)]++;
				}
				else if((int)(sbf.charAt(i))>=97&&(int)(sbf.charAt(i))<=122)
				{
					this.sumnumber++;
					this.Chars[(int)(sbf.charAt(i)-97)]++;
				}
			}
		      	      
			return true;
		}
		catch(IOException e)
		{
			return false;
		}
	}
	public double getFrequency(char a)
	{
		if(a>=65&&a<=90)
			return (double)this.Chars[a-65]/this.sumnumber;
		else if(a>=97&&a<=122)
			return (double)this.Chars[a-97]/this.sumnumber;
		else
			return 0;
	}
	
	public void printFrequencies()
	{
		for(int i = 0;i<26;i++)
		{
			System.out.println((char)(65+i)+":"+ (double)this.Chars[i]*100/this.sumnumber+"%");
		}
	}
}

test2.java

package tes7;

public class test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		System.out.println((int)'a');
//		System.out.println((int)'z');
//		System.out.println((int)'A');
//		System.out.println((int)'Z');
		
		LetterFrequencyCount l = new LetterFrequencyCount();
		l.loadFile("C:\\Users\\14404\\Desktop\\1.txt");
		l.printFrequencies();
	}

}

猜你喜欢

转载自blog.csdn.net/Caoyang_He/article/details/83451038