老师,作业求批改点评,顺带一个小疑惑。
来源:3-16 自由编程
孬帮手慕小菜
2019-12-04 19:40:24
Test类:
import mode.ModeOne; import mode.ModeTwo; public class Test { public static void main(String[] args) { ModeOne m1 = new ModeOne(); ModeTwo m2 = new ModeTwo(); } }
ModeOne类:
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ModeOne { Long n = 0l,m = 0l;//设定计时变量n,m /** * 无参构造,对speech.txt文件进行写操作的主要方法 */ public ModeOne() { n = System.currentTimeMillis();//获取运行开始时间 try { FileOutputStream fos = new FileOutputStream("F:\\IO\\test\\speech.txt");//设定文件绝对路径 for(int i=0;i<100000;i++) {//循环十万次写入数据 fos.write((char)i);//向文件中写入字符数据 } m = System.currentTimeMillis();//获取运行后时间 System.out.println("写入完毕总用时:"+(m-n)+"毫秒");//计算出总运行时间 fos.close();//关闭流释放资源 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch(IOException e) { e.printStackTrace(); } } }
ModeTwo类:
import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ModeTwo { Long n = 0l,m = 0l;//设定计时变量n,m /** * 无参构造,对speech2.txt文件进行写操作的主要方法 */ public ModeTwo() { n = System.currentTimeMillis();//获取运行之前的时间 try { FileOutputStream fop = new FileOutputStream("F:\\IO\\test\\speech2");//设定文件绝对路径 BufferedOutputStream bfos = new BufferedOutputStream(fop);//使用缓冲流 for(int i = 0;i<100000;i++) {//循环十万次写入数据 bfos.write((char)i);//向文件中写入字符数据 } m = System.currentTimeMillis();//获取运行之后的时间 System.out.println("写入完毕,总用时"+(m-n)+"毫秒");//计算出总运行时间 bfos.flush();//强制清空缓冲区 bfos.close();//关闭流,释放资源 fop.close();//关闭流释放资源 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } }
疑问:
如果我先关闭输入流再关闭缓冲流为什么会报错呢?
1回答
好帮手慕小尤
2019-12-05
同学你好,1. 建议同学按照作业要求计算出节省的时间。修改ModeOne与ModeTwo方法的类型将时间返回回去然后进行计算。修改后代码如下:
2. 流的关闭顺序是有要求的,如下所示的代码是有错误的:bfos是通过fos生成的,所以要先关闭bfos,然后再关闭fos。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题