Java复制文件不能运行_Java中的文件复制操作

文件的复制

FileInputStream(字节流方式)

FileInputStream 从文件系统中的某个文件中获得输入字节

看如下示例:

package IOPractice;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

/**

* 将file1文件复制到file2文件里

*/

public class CopyFile {

//复制音频文件

//  private static String file1 = "D:/Test/陈奕迅 - 浮夸.mp3";

//  private static String file2 = "D:/Test/aa/bb.mp3";

//复制视频文件

//  private static String file1 = "D:/Test/嵌套子查询.wmv";

//  private static String file2 = "D:/Test/aa/bb.wmv";

//复制图片

//  private static String file1 = "D:/Test/05.jpg";

//  private static String file2 = "D:/Test/aa/bb.jpg";

//复制文字文档文件

private static String file1 = "D:/Test/c.txt";

private static String file2 = "D:/Test/aa/bb.txt";

public static void main(String[] args) {

try {

//字节输入流

FileInputStream fis = new FileInputStream(file1);

FileOutputStream fos = new FileOutputStream(file2);

//字节输出流

byte[] b = new byte[1024];

while((fis.read(b))!=-1){

fos.write(b);

}

fis.close();

fos.flush();

fis.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

从以上示例代码中可以看到:

我们的目的是想将file1这个文件复制到file2这个文件里,对于file1,我们分别用音频文件、视频文件、图片和文档文件做了实验,运行结果显示,都是可以实现复制功能的,而且file2这个文件还可以正常的使用和查看,说明了FileInPutStream这种方式是可以对音频文件、视频文件、图片和文档文件进行操作的,而且不会产生什么问题

BufferedReader(字符流方式)

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取

看如下示例:

package IOPractice;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

/**

* 将file1文件复制到file2文件里

*/

public class BufferedRWDemo {

//复制音频文件

// private static String file1 = "D:/Test/陈奕迅 - 浮夸.mp3";

// private static String file2 = "D:/Test/aa/bb.mp3";

// 复制视频文件

// private static String file1 = "D:/Test/嵌套子查询.wmv";

// private static String file2 = "D:/Test/aa/bb.wmv";

// 复制图片

// private static String file1 = "D:/Test/05.jpg";

// private static String file2 = "D:/Test/aa/bb.jpg";

// 复制文字文档文件

private static String file1 = "D:/Test/c.txt";

private static String file2 = "D:/Test/aa/bb.txt";

public static void main(String[] args) {

try {

BufferedReader br = new BufferedReader(new FileReader(file1));

BufferedWriter bw = new BufferedWriter(new FileWriter(file2));

String s = null;

while ((s = br.readLine()) != null) {

bw.write(s + "\r\n");

}

br.close();

bw.flush();

bw.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

从以上示例代码中可以看到:

我们的目的是想将file1这个文件复制到file2这个文件里,对于file1,我们分别用音频文件、视频文件、图片和文档文件做了实验,运行结果显示,都是可以实现复制功能的,但是复制后的音频文件、视频文件、图片打不开,只有文档文件能正常打开,说明了BufferedReader这种方式不能对音频文件、视频文件和图片进行操作,只能对文档文件

总结:

有些人在这里就有疑问了:那我们应该在什么时候用FileInputStream这种方式、什么时候采用BufferedReader这种方式呢?

这就取决于你需要要操作的对象是什么了。如果你操作的对象是图片、音频和视频文件的话,那么就选择FileInputStream;如果操作对象是文字内容的文档的话,就选择BufferedReader,因为BufferedReader对图片、音频和视频文件的操作会使原文件产生损坏,不能播放。

那么又会有人会问了,那万一有个文件夹里,既存在图片、音频和视频文件,又存在文字文档文件,现在又想将这个文件夹复制到另外一个地方,怎么实现这个操作呢?

文件夹的复制

在理解上面的基础上,再看如下小示例即可明白了:

package IOPractice;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

/**

* 将文件夹"D:/Test"里的所有内容复制到"D:/Test1"里

*/

public class MyFileCopy {

public static void main(String[] args) throws IOException {

copyFile("D:/Test", "D:/Test1");

}

//文件复制操作

public static void copyFile(String file1, String file2) throws IOException{

File in = new File(file1);//源文件

File out = new File(file2);//目标文件

if(!in.exists()){//源文件不存在时

System.out.println(in.getAbsolutePath()+"源文件路径错误");

}else{//源文件存在时

System.out.println("源文件路径" + in.getAbsolutePath());

System.out.println("目标路径" + out.getAbsolutePath());

}

if(!out.exists()){

out.mkdirs();//如果目标文件夹不存在,则自动创建

}

//将源文件中的文件放入file数组中

File[] file = in.listFiles();

//定义字节输入流和输出流

FileInputStream fis = null;

FileOutputStream fos = null;

for(int i=0; i

if(file[i].isFile()){

//如果从file中拿出来的是文件,则开始copy操作

fis = new FileInputStream(file[i]);

fos = new FileOutputStream(new File(file2+"/"+file[i].getName()));

byte[] b = new byte[1024*10];

int c;

while((c = fis.read(b)) != -1){

fos.write(b,0,c);

System.out.println("文件复制中..");

}

fis.close();

fos.flush();

fos.close();

}else{

//如果从file中拿出来的是文件夹,则反复执行此方法

copyFile(file1+"/"+file[i].getName(),file2+"/"+file[i].getName());

}

}

}

}

以上代码的功能为:将文件夹"D:/Test"里的所有内容复制到"D:/Test1"里

而且复制得到的所有文件都是正常的,没有损坏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值