Java怎么实现文件拷贝

用FileInputStream、DataInputStream和FileOutputStream、DataOutputStream完成一个文件拷贝:将e:\test.j... 用FileInputStream、DataInputStream和FileOutputStream、DataOutputStream完成一个文件拷贝:将e:\test.jpg 拷贝到 e:\demo\test.jpg 展开
 我来答
好程序员
2018-08-03 · HTML5前端培训/大数据培训/Java
好程序员
好程序员是IT高端课程培训基地,从平凡到卓越,为梦想而拼搏。
向TA提问
展开全部

工具/原料

一台配置了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

随风的鱼儿漂流
推荐于2017-10-02 · TA获得超过617个赞
知道小有建树答主
回答量:123
采纳率:75%
帮助的人:58.4万
展开全部
Java实现文件拷贝其实质上就是使用java提供的三种文件流操作,字节流,字符流,二进制流。
字节流: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编码为两个字节(或者以上?)则可能会造成影响;字符流读取文件的单位为字符,没有上述字节流的弊端,而且其提供缓冲区读取/写入,更加方便与高效;二进制流本质上也属于字节流,但是它在读取/写入文件时把文件内容转化为二进制的方式读取/写入,不易出错而且极为高效,一般用于读取/写入视频等大文件信息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笑叹江雪
推荐于2017-09-27 · TA获得超过668个赞
知道小有建树答主
回答量:264
采纳率:100%
帮助的人:336万
展开全部
建议看一下apache FileUtils.copyFile的源码

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
}
}
}

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
o雨落流星o
2015-09-11 · 超过12用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:22.3万
展开全部
IO实现。重新读取 写入新文件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式