java复制文件的4种方式及拷贝文件到另一个目录下的实例代码

作者:mrr 时间:2023-05-15 16:03:25 

尽管Java提供了一个可以处理文件的IO操作类。 但是没有一个复制文件的方法。 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候。 然而有几种方法可以进行Java文件复制操作,下面列举出4中最受欢迎的方式。

1. 使用FileStreams复制

这是最经典的方式将一个文件的内容复制到另一个文件中。 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B。 这是第一个方法的代码:


private static void copyFileUsingFileStreams(File source, File dest)
   throws IOException {  
 InputStream input = null;  
 OutputStream output = null;  
 try {
     input = new FileInputStream(source);
     output = new FileOutputStream(dest);    
     byte[] buf = new byte[1024];    
     int bytesRead;    
     while ((bytesRead = input.read(buf)) > 0) {
       output.write(buf, 0, bytesRead);
     }
 } finally {
   input.close();
   output.close();
 }
}

正如你所看到的我们执行几个读和写操作try的数据,所以这应该是一个低效率的,下一个方法我们将看到新的方式。

2. 使用FileChannel复制

Java NIO包括transferFrom方法,根据文档应该比文件流复制的速度更快。 这是第二种方法的代码:


private static void copyFileUsingFileChannels(File source, File dest) throws IOException {  
   FileChannel inputChannel = null;  
   FileChannel outputChannel = null;  
 try {
   inputChannel = new FileInputStream(source).getChannel();
   outputChannel = new FileOutputStream(dest).getChannel();
   outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
 } finally {
   inputChannel.close();
   outputChannel.close();
 }
}

3. 使用Commons IO复制

Apache Commons IO提供拷贝文件方法在其FileUtils类,可用于复制一个文件到另一个地方。它非常方便使用Apache Commons FileUtils类时,您已经使用您的项目。基本上,这个类使用Java NIO FileChannel内部。 这是第三种方法的代码:


private static void copyFileUsingApacheCommonsIO(File source, File dest)
   throws IOException {
 FileUtils.copyFile(source, dest);
}

4. 使用Java7的Files类复制

如果你有一些经验在Java 7中你可能会知道,可以使用复制方法的Files类文件,从一个文件复制到另一个文件。 这是第四个方法的代码:


private static void copyFileUsingJava7Files(File source, File dest)
   throws IOException {  
   Files.copy(source.toPath(), dest.toPath());
}

下面看下java拷贝文件到另一个目录下的实现代码,具体代码如下所示:


package com.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
public class TestHtml {
/**
* 复制单个文件
* @param oldPath String 原文件路径 如:c:/fqf.txt
* @param newPath String 复制后路径 如:f:/fqf.txt
* @return boolean
*/
public void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件存在时
InputStream inStream = new FileInputStream(oldPath); //读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
}
catch (Exception e) {
System.out.println("复制单个文件操作出错");
e.printStackTrace();
}
}
/**
* 复制整个文件夹内容
* @param oldPath String 原文件路径 如:c:/fqf
* @param newPath String 复制后路径 如:f:/fqf/ff
* @return boolean
*/
public void copyFolder(String oldPath, String newPath) {
try {
(new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹
File a=new File(oldPath);
String[] file=a.list();
File temp=null;
for (int i = 0; i < file.length; i++) {
if(oldPath.endsWith(File.separator)){
temp=new File(oldPath+file[i]);
}
else{
temp=new File(oldPath+File.separator+file[i]);
}
if(temp.isFile()){
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath + "/" +
(temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ( (len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if(temp.isDirectory()){//如果是子文件夹
copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);
}
}
}
catch (Exception e) {
System.out.println("复制整个文件夹内容操作出错");
e.printStackTrace();
}
}
public static void main(String[] args)throws Exception {
// //这是你的源文件,本身是存在的
// File beforefile = new File("C:/Users/Administrator/Desktop/Untitled-2.html");
//
// //这是你要保存之后的文件,是自定义的,本身不存在
// File afterfile = new File("C:/Users/Administrator/Desktop/jiekou0/Untitled-2.html");
//
// //定义文件输入流,用来读取beforefile文件
// FileInputStream fis = new FileInputStream(beforefile);
//
// //定义文件输出流,用来把信息写入afterfile文件中
// FileOutputStream fos = new FileOutputStream(afterfile);
//
// //文件缓存区
// byte[] b = new byte[1024];
// //将文件流信息读取文件缓存区,如果读取结果不为-1就代表文件没有读取完毕,反之已经读取完毕
// while(fis.read(b)!=-1){
// //将缓存区中的内容写到afterfile文件中
// fos.write(b);
// fos.flush();
// }
String oldPath="C:/Users/Administrator/Desktop/Untitled-2.html";
String newPath="C:/Users/Administrator/Desktop/jiekou0/Untitled-2.html";
TestHtml t=new TestHtml();
t.copyFile(oldPath, newPath);
}
}

总结

以上所述是小编给大家介绍的java复制文件的4种方式及拷贝文件到另一个目录下的实例代码网站的支持!

标签:java,复制,拷贝,文件
0
投稿

猜你喜欢

  • mybatis映射文件操作存储过程的实现

    2023-07-03 22:36:41
  • Java SpringMVC异步处理详解

    2021-08-10 15:03:58
  • Android中ToggleButton开关状态按钮控件使用方法详解

    2022-11-10 06:24:35
  • Java毕业设计实战之共享租车信息管理系统的实现

    2022-08-02 13:37:32
  • C#实现解压GZip文件的方法

    2022-11-29 07:25:36
  • SpringBoot小程序推送信息的项目实践

    2021-12-07 04:23:34
  • Android WebView使用的技巧与一些坑

    2022-10-18 12:57:23
  • 高并发下如何避免重复数据产生技巧

    2022-04-17 07:08:57
  • C#实现基于加减按钮形式控制系统音量及静音的方法

    2022-07-09 09:31:50
  • 利用java实现二叉搜索树

    2023-10-25 13:25:07
  • implicit关键字做自定义类型隐式转换的方法

    2021-10-22 20:00:40
  • android九宫格可分页加载控件使用详解

    2022-03-04 08:14:02
  • java request.getHeader("user-agent")获取浏览器信息的方法

    2022-05-28 01:04:26
  • Android实现文字上下滚动效果

    2023-02-02 07:40:00
  • Java队列篇之实现数组模拟队列及可复用环形队列详解

    2021-09-12 17:49:42
  • Android WorkManager浅谈

    2023-03-24 11:26:46
  • C#编程实现动态改变配置文件信息的方法

    2022-05-01 15:09:25
  • SpringBoot集成Spring Security用JWT令牌实现登录和鉴权的方法

    2023-07-02 22:48:29
  • 浅谈xml配置spring profiles的几个注意点

    2022-07-20 15:20:09
  • Java 确保某个Bean类被最后执行的几种实现方式

    2021-09-28 09:53:49
  • asp之家 软件编程 m.aspxhome.com