java实现文件拷贝
1、如果想要实现文件的拷贝操作,那么现在有两种做法:1、将所有的文件内容一次性读取到程序之中,而后一次性输出;2、采用边读边输出的方,那么现在就不会占用过大的内存空间;由于现在有可能要拷贝二进制数据,那么一定使用字节流比较合适一下。
2、如果输入参数正确了,那么应该进行源文件的验证。package com.gwolf;import java.io.File;public class TestDemo { public static void main(String[] args) throws Exception{ if(args.length!=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]); }}
3、如果此时源文件正确,那么就需要定义输出文件,同事要考虑到输出文件有目录的情况。package com.gwolf;import java.io.File;public class TestDemo { public static void main(String[] args) throws Exception{ if(args.length!=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();// 创建目录 } }}
4、接下来实现文件内容的拷贝。package com.gwolf;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;public class TestDemo { public static void main(String[] args) throws Exception{ if(args.length!=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 outputStream = new FileOutputStream(outFile); int temp = 0; while((temp=input.read())!=-1) { outputStream.write(temp); } }}
5、文件读取完成之后,关闭所有的连接。package com.gwolf;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;public class TestDemo { public static void main(String[] args) throws Exception{ if(args.length!=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 outputStream = new FileOutputStream(outFile); int temp = 0; while((temp=input.read())!=-1) { outputStream.write(temp); } input.close(); outputStream.close(); }}
6、这个时候发现,的确实现了拷贝,但是这个拷贝的速度实在太慢了。现在的程序属于单个字节的拷贝。我们必须魇冷钥玫采用部分数据读取并保存的方式。package com.gwolf;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;public class TestDemo { public static void main(String[] args) throws Exception{ if(args.length!=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 outputStream = new FileOutputStream(outFile); int temp = 0; byte data[] = new byte[1024]; while((temp=input.read(data))!=-1) { outputStream.write(data,0,temp); } input.close(); outputStream.close(); }}
7、在以后的代码编写过程之中一定会给你一个InputStream ,就需要按照以上的方法进行内容的输出。