异常处理与I/O操作

实验名称 实验五、异常处理与I/O操作 日期 2020年 07 月01 日
一、实验目的:
1、了解异常处理机制、异常类机器层次关系。
2、掌握异常的捕获和处理、自定义异常类。
3、了解流的基本划分,字节流和字符流的不同应用场景。
4、掌握文件输入输出字节流的应用、标准输入输出流的应用。
5、了解文件字符流和Scanner的使用和串行化。
二、实验环境:

PC+Windows10+Eclipse

三、实验内容:
(写出主要的内容)
1、分别使用FileWriter 和 BufferedWriter 往文件中写入1万个随机数,比较用时的多少?(用时采用方法System.currentTimeMillis())求时间差;
代码:

package 实验五;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
public class Timef1 {
	public static void main(String[] args) throws IOException{
		long start=System.currentTimeMillis();
		FileWriter f=new FileWriter("f.writetime");
		Random ran=new Random();
		for(int i=0;i<10000;i++) {
			f.write((int)ran.nextDouble());
		}
		long end=System.currentTimeMillis();
		f.close();
		System.out.print("FileWriter用时:");
		System.out.println(end+"ms-"+start+"ms="+(end-start)+"ms");
	}

}
package 实验五;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import java.io.BufferedWriter;
public class Timef {
	public static void main(String[] args) throws IOException{
		long start=System.currentTimeMillis();
		BufferedWriter f2=new BufferedWriter(new FileWriter("f.Bwritetime"));
		Random ran=new Random();
		for(int i=0;i<10000;i++) {
			f2.write((int)ran.nextDouble());
		}
		f2.flush();
		long end=System.currentTimeMillis();
		f2.close();
		System.out.print("BufferedWriter的用时:");
		System.out.println(end+"ms-"+start+"ms="+(end-start)+"ms");
	}

}

2、编写一个文件,如果文件Exercise 19_2.dat 不存在,就创建一个名为Exercise 19_2.txt的文件。向这个文件追加新数据。使用DataOutputStream将100个随机生成的整数写入这个文件中。
代码:

package 实验五;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
import java.io.PrintWriter;
public class write_random {
	public static void main(String[] args) throws IOException{
		File file=new File("Exercise19_2.dat");
		Random random=new Random();
		if(!file.exists()) {
			file=new File("Exercise19_2.txt");
		}
		PrintWriter f=new PrintWriter(new FileOutputStream(file,true));
		for(int i=0;i<100;i++) {
			f.print(random.nextDouble()*100000000+"\n");
		}
		f.close();
	}

}

3、假设已经使用DataOutputStream中的writeInt(int)创建一个名为Exercise 19_3.dat的二进制数据文件,文件包含数目不确定的整数,编写一个程序来计算这些整数的总和。
代码:

package 实验五;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.EOFException;
import java.util.Random;
public class sum {
	public static void main(String[] args) throws IOException{
		File file=new File("Excercise19_3.dat");
		DataOutputStream output=new DataOutputStream(new FileOutputStream(file));
		Random random=new Random();
		int num=random.nextInt(100);
		int sum=0;
		int j=0;
		System.out.println("共有"+num+"个数");
		for(int i=0;i<num;i++) {
			int r=random.nextInt(100);
			output.writeInt(r);
			sum+=r;
		}
		System.out.println("总和为:"+sum+"\n数据如下:");
		output.close();
		DataInputStream input=new DataInputStream(new FileInputStream(file));
		try {
			while(true) {
				System.out.print(input.readInt()+"  ");
				j++;
				if(j%10==0) {
					System.out.println();
				}
			}
		}catch (EOFException ex) {
			System.out.println("\nAll data are read.");
		}
	}

}

4、在文本文件bigbook.txt中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数,并显示统计的时间。

代码:

package 实验五;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Allin {
	public static void main(String[] args) throws FileNotFoundException{
		long sum=0;
		long begin=System.currentTimeMillis();
		Scanner input=new Scanner(new File("bigbook.txt"));
		while(input.hasNext()) {
			String temp=new String(input.next());
			sum+=count(temp);
		}
		long finish=System.currentTimeMillis();
		System.out.println("A出现的次数为:"+sum);
		System.out.println("统计用时:"+(finish-begin)+"ms.");
	}
	private static long count(String t) {
		long re=0;
		for(int i=0;i<t.length();i++) {
			if(t.charAt(i)=='A')
				re++;
		}
		return re;
	}
}

5、编写一个Java应用程序,给当前的类所在的文件ReadExample.java添加行号拷贝到另一个文件temp.text。
代码:

package 实验五;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class Temp {
	public static void main(String[] args) throws FileNotFoundException{
		File file=new File("D:\\JAVA_Workplace\\实验五\\src\\实验五\\Temp.java");
		File targer=new File("temp.txt");
		Scanner input=new Scanner(file);
		PrintWriter output=new PrintWriter(targer);
		int i=1;
		while(input.hasNextLine())
		{
			output.write(i+" ");
			output.write(input.nextLine());
			output.println();
			i++;
		}
		output.close();
		input.close();
	}

}

6、(将对象和数组存储在文件中)编写一个程序,向一个名为Exercise19_5.dat的文件中存储一个含5个int值1,2,3,4,5的数组,存储一个表示当前时间的Date对象,存储一个double值5.5。
代码:

package 实验五;
import java.io.*;
public class Date {
	public static void main(String[] args) throws FileNotFoundException,IOException,ClassNotFoundException{
		int []numbers= {1,2,3,4,5};
		ObjectOutputStream output=new ObjectOutputStream(new FileOutputStream("Exercise19_5.dat"));
		output.writeDouble(5.5);
		output.writeObject(numbers);
		output.writeObject(new java.util.Date());
		output.close();
		ObjectInputStream input=new ObjectInputStream(new FileInputStream("Exercise19_5.dat"));
		double a=input.readDouble();
		int []b=(int [])(input.readObject());
		java.util.Date date=(java.util.Date)(input.readObject());
		for(int i=0;i<b.length;i++) {
			System.out.print(b[i]+" ");
			System.out.println();
		}
		System.out.println(a+" "+date);
	}

}

四、心得体会:
通过此次实验,知道了如何利用异常处理机制实现对Java应用中各种类型异常的发现、捕获和有效处理。了解了异常处理机制、异常类机器层次关系;掌握了异常的捕获和处理、自定义异常类;了解了流的基本划分,字节流和字符流的不同应用场景;掌握了文件输入输出字节流的应用、标准输入输出流的应用;了解了文件字符流和Scanner的使用和串行化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值