如果想要实现文件的拷贝操作,那么现在有两种做法:
1、将所有的文件内容一次性读取到程序之中,而后一次性输出;
2、采用边读边输出的方,那么现在就不会占用过大的内存空间;
由于现在有可能要拷贝二进制数据,那么一定使用字节流比较合适一下。
如果输入参数正确了,那么应该进行源文件的验证。
package com.gwolf;
import java.io.File;
public class TestDemo {
public static void main(String[] args) throws Exception{
if(args.length!=2) {
System.exit(1);
}
File inFile = new File(args[0]);
if(!inFile.exists()) {
System.exit(1);
}
File outFile = new File(args[1]);
}
}
如果此时源文件正确,那么就需要定义输出文件,同事要考虑到输出文件有目录的情况。
package com.gwolf;
import java.io.File;
public class TestDemo {
public static void main(String[] args) throws Exception{
if(args.length!=2) {
System.exit(1);
}
File inFile = new File(args[0]);
if(!inFile.exists()) {
System.exit(1);
}
File outFile = new File(args[1]);
if(!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();// 创建目录
}
}
}
接下来实现文件内容的拷贝。
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.exit(1);
}
File inFile = new File(args[0]);
if(!inFile.exists()) {
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);
}
}
}
文件读取完成之后,关闭所有的连接。
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.exit(1);
}
File inFile = new File(args[0]);
if(!inFile.exists()) {
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();
}
}
这个时候发现,的确实现了拷贝,但是这个拷贝的速度实在太慢了。现在的程序属于单个字节的拷贝。我们必须采用部分数据读取并保存的方式。
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.exit(1);
}
File inFile = new File(args[0]);
if(!inFile.exists()) {
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();
}
}
联系客服