Java怎么实现文件拷贝
工具/原料
一台配置了java环境的电脑
一款适合自己的开发集成环境,这里用的是eclipse Kepler
文件拷贝DEMO
1.首先,理清思路,然后我们再动手操作。
拷贝,有源文件,和目的文件。
如果原文件不存在,提示,报错。
如果目的文件不存在,创建空文件并被覆盖。
如果目的地址,也即目的路径不存在,创建路径。
拷贝,输入流,输出流,关闭流。
拷贝前输出文件大小,计算拷贝大小,比较并核实。输出。
2.首先呢,先判断传参是否完整。
如果不够两个参数,或者多于两个参数,提示错误。
如果目标文件不存在,创建 空文件继续复制。
3.在开始前,输出被拷贝的源文件的大小。
4.获得文件名称,即短名。也即路径下的文件全名(包括文件扩展名)。
5.拷贝的关键,这里用的简单的缓冲流。从源文件到目的文件。
number of bytes copied 即是对拷贝长度的累计,直到拷贝完成,输出。
6.将步骤二中的判断并拷贝文件的代码写在一个main函数中,
执行拷贝,拷贝完成。结果拷贝大小和源文件大小一致,成功。
7.在执行前,记得输入参数。
如果是使用命令提示符,执行 javac CopyFile.java 之后,
执行 java CopyFile [源文件长名] [目的文件长名]
如果是使用的eclipse,在运行前设置一下运行参数,完成后点击运行,如下图。
P.S. 这里面的所谓“长名”是指完整绝对路径+文件名+文件类型扩展名
这里的源文件及目的文件的名称分别为:
E:/IP_Data.rar 和 D:/testFiles/IP_Data.rar
END
字节流:FileInputStream 与 FileOutputStream
使用示例:
void copyFile(File oldFile, File newFile){
FileOutputStream outputStream = new FileOutputStream(newFile,true);
FileInputStream inputStream = new FileInputStream(oldFile);
byte []wxj = new byte[1024];
int length = inputStream.read(wxj);
while(length!=-1){
outputStream.write(wxj,0,length);
length = inputStream.read(wxj);
}
}
字符流:FileReader 和 FileWriter
使用示例:
void copyFile(File oldFile, File newFile){
Writer writer = new FileWriter(newFile,true);
Reader reader = new FileReader(oldFile);
char []wxj = new char[1024];
int length = reader.read(wxj);
while(length!=-1){
writer.write(wxj,0,length);
length = reader.read(wxj);
}
}
二进制流:DataInputStream 和 DataOutputStream
使用示例:
void copyFile(File oldFile, File newFile){
FileOutputStream outputStream = new FileOutputStream(newFile,true);
FileInputStream inputStream = new FileInputStream(oldFile);
DataInputStream dataInput = new DataInputStream(inputStream);
DataOutputStream dataOutput = new DataOutputStream(outputStream);
byte []wxj = new byte[1024];
int length = dataInput.read(wxj);
while(length!=-1){
dataOutput.write(wxj,0,length);
length = dataInput.read(wxj);
}
}
总结一下:字节流读取文件的单位为字节,对于英语字母(只占一个字节)不受任何影响,而对于中文文字在unicode编码为两个字节(或者以上?)则可能会造成影响;字符流读取文件的单位为字符,没有上述字节流的弊端,而且其提供缓冲区读取/写入,更加方便与高效;二进制流本质上也属于字节流,但是它在读取/写入文件时把文件内容转化为二进制的方式读取/写入,不易出错而且极为高效,一般用于读取/写入视频等大文件信息。
public class CopyFile {
public static void doCopyFile() throws IOException{
File srcFile = new File("e:\\test.jpg");
File destFile = new File("e:\\demo\\test.jpg");
FileInputStream input = new FileInputStream(srcFile);
try {
FileOutputStream output = new FileOutputStream(destFile);
try {
byte[] buffer = new byte[4096];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}
} finally {
try {
if (output != null) {
output.close();
}
} catch (IOException ioe) {
// ignore
}
}
} finally {
try {
if (input != null) {
input.close();
}
} catch (IOException ioe) {
// ignore
}
}
}
}