Java怎么实现文件拷贝

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java怎么实现文件拷贝相关的知识,希望对你有一定的参考价值。

用FileInputStream、DataInputStream和FileOutputStream、DataOutputStream完成一个文件拷贝:将e:\test.jpg 拷贝到 e:\demo\test.jpg

工具/原料

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

参考技术A 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编码为两个字节(或者以上?)则可能会造成影响;字符流读取文件的单位为字符,没有上述字节流的弊端,而且其提供缓冲区读取/写入,更加方便与高效;二进制流本质上也属于字节流,但是它在读取/写入文件时把文件内容转化为二进制的方式读取/写入,不易出错而且极为高效,一般用于读取/写入视频等大文件信息。
参考技术B 建议看一下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




本回答被提问者采纳
参考技术C IO实现。重新读取 写入新文件。

Java怎么实现文件数据拷贝

实现一个文件的内容拷贝到另一个文件里

public void copyDemo () throws IOException 
  //创建文件输入流 FileInputStream fis
= new FileInputStream("d:\\bbb.txt");
  //创建文件输出流 FileOutputStream fos
= new FileOutputStream("d:\\ccc.txt");   //如果读取到内容则把内容写入另一个文件里 int c; while ((c = fis.read()) > 0) fos.write(c); fis.close(); fos.close();

 

以上是关于Java怎么实现文件拷贝的主要内容,如果未能解决你的问题,请参考以下文章

java如何拷贝文件到另一个目录下

Java IO编程——文件拷贝

用C语言实现文件拷贝

文件快速拷贝-reflink

Java字节流实现文件夹的拷贝

Java代码拷贝文件夹 注:复制文件夹