实验名称 实验五、异常处理与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的使用和串行化。