java 实验六 输入输出 实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六输入输出

实验目标:

1. 理解I/O流的概念与机制,掌握其分类;

2. 掌握文本文件的读写、二进制文件的读写、处理流类的概念和用法、对象序列化;

3. 掌握File类,压缩流类和RandomAccessFile类的使用;

4. 遇到I/O方面的问题,能够自行查阅API稳当解决。

实验任务:

1、课本198页习题2,并使用这个程序来copy自己硬盘的大文件(任何格式都可

以,如电影,最好大于500MB),看看需时多少?

提示:首先需要看懂课本文本文件例子,再模仿修改,关键不同在下面三点。

(1)文本文件复制中是每次读一行,而在二进制文件复制中是自行指定读取多少字节的数据,写法如下。

private boolean copyFiles() { //这个私有方法用来拷贝文件,如无异常返回true try {

byte[] buf = new byte[512];

int num = source.read(buf); //从源文件读取数据

while (num > 0) { // 只要能够读取数据,就继续读

dest.write(buf, 0, num); //向目标文件写入

num = source.read(buf); //从源文件读取数据

}

}

catch (IOException iox) {

System.out.println("Problem reading or writing");

return false;

}

return true;

}

-------------------

以上请注意byte[] buf = new byte[512],说明每次只读512字节,请更换每次读取的缓冲字节数,比如byte[] buf = new byte[5120],每次读5mb左右,请试试copy 效率回有所提高吗?请截图回答。

(2)需时多少可以通过CPU时钟计算,方法见下。

Calendar start=Calendar.getInstance();

new BinaryFileCopy().copy(args[0], args[1]);

Calendar end=Calendar.getInstance();

long time=end.getTimeInMillis()-start.getTimeInMillis();

System.out.println("copy时间为"+time+"毫秒");

(3)因为这个程序执行需要输入参数的,所以在eclipse里面不能直接执行的,要到

dos界面去执行,这里命令行的写法就有点讲究了。

首先,运行的是class文件,你先要找到class文件而不是java源代码文件,一般放在项目的bin目录下,因此必须在bin目录下执行,第二执行class文件的程序是java,课本第5页最后几行有介绍,比如运行当前目录下的HelloWorld.class,语法为:java HelloWorld,注意,必须在bin目录下执行

第三,如果你的类是在一个包里,比如我这个类Exe6_2.class在包charp6里面,写法为java charp6.Exe6_2

第四,这个copy程序需要输入两个参数,一个源文件,一个目标文件,记得参数文件名要有后缀名,具体见下截图。

当byte[] buf = new byte[512]时,该程序的代码如下:

package zi;

import java.io.*;

import java.util.Calendar;

class BinaryFileCopy {

String sourceName, destName;

FileInputStream source;

FileOutputStream dest;

String line;

//打开源文件和目标文件,无异常返回true

private boolean openFiles() {

try {

source = new FileInputStream(sourceName );

}

catch ( IOException iox ) {

System.out.println("Problem opening " +sourceName );

return false;

}

try {

dest = new FileOutputStream(destName);

}

catch ( IOException iox )

{

System.out.println("Problem opening " + destName );

return false;

}

return true;

}

//复制文件

private boolean copyFiles() { //这个私有方法用来拷贝文件,如无异常返回true try {

byte[] buf = new byte[512];

int num = source.read(buf); //从源文件读取数据

while (num > 0) {// 只要能够读取数据,就继续读

dest.write(buf, 0, num); //向目标文件写入

num = source.read(buf); //从源文件读取数据

}

}

catch (IOException iox) {

System.out.println("Problem reading or writing");

return false;

}

return true;

}

//关闭源文件和目标文件

private boolean closeFiles() {

boolean retVal=true;

try {

source.close();

}

catch ( IOException iox ) {

System.out.println("Problem closing " + sourceName );

retVal = false;

}

try {

dest.close();

}

catch ( IOException iox ) {

System.out.println("Problem closing " + destName );

retVal = false;

}

return retVal;

}

//执行复制

public boolean copy(String src, String dst ) {

sourceName = src ;

destName = dst ;

相关文档
最新文档