Java实现文件复制

代码实现复制文件


/*

 * 编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。
 * <复制前改名>
 */
public class CopyFolder {
public static void main(String[] args) throws IOException {
// 封装d:\\java这个目录
File srcFile = new File("d:\\hellodong");

// 获取该目录所有满足条件的File[]数组。
File[] fileArray = srcFile.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
System.out.println(dir+"---"+name);
return new File(dir, name).isFile() && name.endsWith(".java");
}
});

//判断是否存在目的地目录,如果没有,就创建。
File destFile = new File("d:\\jad");
if(!destFile.exists()){
destFile.mkdirs();
}


// 遍历File[]数组,获取到每一个File。
for (File file : fileArray) {
// file  -- d:\\java\\Constant.java -- 数据源
//最终的结果:  d:\\jad\\Constant.jad -- 目的地
//复制前改名
String name = file.getName(); //Constant.java
String newName = name.replace(".java", ".jad");//Constant.jad
File newFile = new File(destFile,newName);//d:\\jad\\Constant.jad

//复制文件
BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));

String line = null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}

bw.close();
br.close();
}
}
}


/*
 * 编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。
 * <复制完之后改名>
 */
public class CopyFolder2 {
public static void main(String[] args) throws IOException {
File srcFile = new File("d:\\java");
File[] fileArray = srcFile.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isFile() && name.endsWith(".java");
}
});
File destFile = new File("d:\\jad");
if (!destFile.exists()) {
destFile.mkdir();
}
for (File file : fileArray) {
String name = file.getName();
File newFile = new File(destFile, name); 

BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));

String line = null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
}
File[] destFileArray = destFile.listFiles();
for(File file : destFileArray){
String name = file.getName(); 
String newName = name.replace(".java", ".jad");
File newFile = new File(destFile,newName);
file.renameTo(newFile);
}
}

}



二进制流的复制

复制图片:把项目路径下的mn.jpg复制到d:\\mn.jpg

分析:

A:用字符流

B:用字节流

 

二进制流数据:图片,视频,音频等。

 

由于二进制的合并为字符,在我们使用的编码表中没有对应的数据,那么,将来在写回去的时候,就会有数据的丢失。

所以,二进制流数据只能使用字节流进行操作。

public class CopyImage {
public static void main(String[] args) throws IOException {
// method1();
method2();
}
// 用字节流--一次一个字节数组
private static void method2() throws IOException {
// 封装数据源和目的地
FileInputStream fis = new FileInputStream("mn.jpg");
FileOutputStream fos = new FileOutputStream("d:\\mn.jpg", true);

// 读写
byte[] bys = new byte[1024];
int len = 0;
while ((len = fis.read(bys)) != -1) {
fos.write(bys, 0, len);
}
// 释放资源
fos.close();
fis.close();
}
// 用字符流--一次一个字符
private static void method1() throws IOException {
// 封装数据源和目的地
FileReader fr = new FileReader("mn.jpg");
FileWriter fw = new FileWriter("d:\\mn.jpg");
// 基本读写
int ch = 0;
while ((ch = fr.read()) != -1) {
fw.write(ch);
// fw.flush();
}
// 释放资源
fw.close();
fr.close();
}
}




 复制MP3,加入异常处理标准格式。
 
 数据源:
 d:\\Pink.mp3
 目的地:
 copy.mp3

public class CopyMP3 {
public static void main(String[] args) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream("d:\\Pink.mp3"));
bos = new BufferedOutputStream(new FileOutputStream("copy.mp3"));
byte[] bys = new byte[1024];
int len = 0;
while ((len = bis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值