java实现文件拷贝

package iotest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class testcopy {//先设置好初始化参数 2个文件
	public static void main(String[] args) throws Exception {
		// TODO 自动生成的方法存根
		long start = System.currentTimeMillis();
		if(args.length != 2){// 初始化参数的个数不是2位
				System.out.println("命令执行错误");
				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 input = new FileInputStream(infile);
		OutputStream output = new FileOutputStream(outfile);
		//实现文件拷贝
				int temp = 0; //保存每次读取单个字节
				while((temp = input.read()) != -1){//每次读取单个字节
						output.write(temp);//每次输出单个字节
				}
				input.close();
				output.close();
				long end = System.currentTimeMillis();
				System.out.println("拷贝所花费的时间:"+ (end - start));
	}

       上述代码实现了文件边读边写的操作,需要设置初始化main()的2个文件参数,现在是单字节读写速度很慢,每一次读取一个字节。

回顾一下前面学过两个字节流的操作方法:

           · InputStream: public int read(byte[] b) throwss IOException

                            `将内容读取到字节数组之中,如果没有数据了返回的是-1,否则是就是数组的长度

            `OutputStream: public void write(byte[] b, int off , int len) throws IOException

                             ·要设置的字节数组实际上就是在read()方法里面使用的数组

                             ·一定是从字节数组的第0个元素开始输出,输出读取的数据长度

改进拷贝的代码:

package iotest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class testcopy {//先设置好初始化参数 2个文件
	public static void main(String[] args) throws Exception {
		// TODO 自动生成的方法存根
		long start = System.currentTimeMillis();
		if(args.length != 2){// 初始化参数的个数不是2位
				System.out.println("命令执行错误");
				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 input = new FileInputStream(infile);
		OutputStream output = new FileOutputStream(outfile);
		//实现文件拷贝
				int temp = 0; //保存每次读取单个字节
				byte [] date = new byte[1024];//每次读取1024个字节
				//将每次读取进来的数据保存在字节数组里面,并且返回读取的个数
				while((temp = input.read(date)) != -1){//每次读取单个字节
						output.write(date,0,temp);//每次输出单个字节
				}
				input.close();
				output.close();
				long end = System.currentTimeMillis();
				System.out.println("拷贝所花费的时间:"+ (end - start));
	}
				
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值