> /* * 文件拷贝 * * 模拟DOS系统的文件拷贝程序,实现字节流的综合使用。 * 要求: *
> 在Dos系统之中文件拷贝的命令:copy源文件路径 目标文件路径。 * 如果要想实现文件的拷贝操作,那么现在有两种做法: *
> 方法一: 将所有的文件内容一次性读取到程序之中,而后一次性输出; * 需要开辟一个与文件大小一样的数组,但是如果文件过大呢?
> 程序就崩溃了 * 方法二:采用边读边输出的方式,那么现在就不会占用过大的内存空间。 *
> 由于现在有可能要拷贝二进制数据,那么一定使用字节流会比较合适一些 * *
> 这个时候发现,的确实现了拷贝,但是这个拷贝的速度实在是有些受不了。现在的程序属于单个字节拷贝 *
> 每次读取一个字节,那么这个循环所耗费的时间就太长了。 * while((temp = inputStream.read())!=-1)
> /// 每次读取单个字节 { outputStream.write(temp); /// 输出单个字节 } *
> 如果要想改变以上代码的性能问题,那么久必须采用部分数据读取并保存的方式 * 1 InputStream read(byte b)
> 将内容读取到字节数组之中,如果没有数据了返回的是-1 否则就是长度 * 2 outputStream public void
> write(byte[] b, int off,int len) throws IOException *
> 要设置的字节数组时间上就是在read()方法里面使用的数组 * 一定是从字节数组的第0个元素开始输出,输出读取的数据长度 *
> byte data[] = new byte[1024]; /// 每次读取1024个字节
> ///将每次读取的数据字节数组保存在数组里面,并且返回读取的个数 while((temp =
> inputStream.read(data))!=-1) /// 每次读取单个字节 {
> outputStream.write(data,0,temp); /// 输出数组 }
> * 在以后的代码编写过程之中一定会给你一个InputStream字节流对象,需要按照以上的做法使用同样的方式 * 进行内容的输出 * *
*/
package wenjiancaozuo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class wenjiankaobei {
public static void main(String[] args) throws IOException {
// TODO 自动生成的方法存根
long stary = System.currentTimeMillis();
if(args.length!=2) /// 初始化参数不足两位
{
System.out.println("aaaaaa");
System.exit(1);/// 程序退出执行
}
/// 如果输入参数正确了,那么应该进行文件的验证
File inFile = new File(args[0]); /// 第一个是源文件路径
if(!inFile.exists()) /// 源文件不存在
{
System.out.println("源文件不存在");
System.exit(1);/// 程序退出执行
}
/// 如果源文件存在。那么需要定义输出文件,同时要考虑到输出文件有目录
File outFile = new File(args[1]);
if(!outFile.getParentFile().exists()) /// 输出文件路径不存在
{
outFile.getParentFile().mkdirs(); ///创建目录
}
/// 实现文件内容拷贝
InputStream inputStream = new FileInputStream(inFile);
OutputStream outputStream = new FileOutputStream(outFile);
/// 实现文件拷贝
int temp =0; /// 保存每次读取的内容
// while((temp = inputStream.read())!=-1) /// 每次读取单个字节
// {
// outputStream.write(temp); /// 输出单个字节
// }
byte data[] = new byte[1024]; /// 每次读取1024个字节
///将每次读取的数据字节数组保存在数组里面,并且返回读取的个数
while((temp = inputStream.read(data))!=-1) /// 每次读取单个字节
{
outputStream.write(data,0,temp); /// 输出数组
}
inputStream.close();
outputStream.close();
long end = System.currentTimeMillis();
System.out.println(stary-end);
}
}