Java文件复制多种方法

这篇具有很好参考价值的文章主要介绍了Java文件复制多种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、InputStream与OutputStream 

创建两个文件 - 源和目标。然后我们从源创建InputStream并使用OutputStream将其写入目标文件进行 java 复制文件操作。

private static void copyFileUsingStream(File source, File dest) throws IOException {
    InputStream is = null;
    OutputStream os = null;
    try {
        is = new FileInputStream(source);
        os = new FileOutputStream(dest);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = is.read(buffer)) > 0) {
            os.write(buffer, 0, length);
        }
    } finally {
        is.close();
        os.close();
    }
}

2、Apache Commons IO FileUtils

copyFile(File srcFile, File destFile)可用于在 java 中复制文件。如果您已经在项目中使用 Apache Commons IO,那么使用它来简化代码是有意义的。它在内部使用 Java NIO FileChannel,因此如果您尚未将其用于其他功能,则可以避免使用此包装器方法。下面是使用apache commons io进行java复制文件操作的方法

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

3、Files类的copy()方法在 java 中复制文件

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

4、使用BufferedInputStream/BufferedOutputStream高效字节流进行复制文件

private static void bufferedStreamCopyFile(File srcFile, File desFile) throwsIOException {
         //使用缓冲字节流进行文件复制
         BufferedInputStream bis = new BufferedInputStream(newFileInputStream(srcFile));
         BufferedOutputStream bos = new BufferedOutputStream(newFileOutputStream(desFile));
         byte[] b = new byte[1024];
         Integer len = 0;
         //一次读取1024字节的数据
         while((len = bis.read(b)) != -1) {
             bos.write(b, 0, len);
 }
 bis.close();
 bos.close();
}

5、使用FileReader/FileWriter字符流进行文件复制

注意这种方式只能复制只包含字符的文件,也就意味着你用记事本打开该文件你能够读懂

private static void readerWriterCopyFile(File srcFile, File desFile) throwsIOException  {
         //使用字符流进行文件复制,注意:字符流只能复制只含有汉字的文件
         FileReader fr = newFileReader(srcFile);
         FileWriter fw = newFileWriter(desFile);
         
         Integer by = 0;
         while((by = fr.read()) != -1) {
 fw.write(by);
 }
         
 fr.close();
 fw.close();
     }

6、使用BufferedReader/BufferedWriter高效字符流进行文件复制

意这种方式只能复制只包含字符的文件,也就意味着你用记事本打开该文件你能够读懂

private static void bufferedReaderWriterCopyFile(File srcFile, File desFile)  throwsIOException {
         //使用带缓冲区的高效字符流进行文件复制
         BufferedReader br = new BufferedReader(newFileReader(srcFile));
         BufferedWriter bw = new BufferedWriter(newFileWriter(desFile));
         
         char[] c = new char[1024];
         Integer len = 0;
         while((len = br.read(c)) != -1) {
             bw.write(c, 0, len);
 }
         
         //方式二
         /*String s = null;
 while((s = br.readLine()) != null) {
 bw.write(s);
 bw.newLine();
 }*/
         
 br.close();
 bw.close();
     }

7、使用BufferedReader/BufferedWriter高效字符流进行文件复制

注意这种方式只能复制只包含字符的文件,也就意味着你用记事本打开该文件你能够读懂

private static void bufferedReaderWriterCopyFile(File srcFile, File desFile)  throwsIOException {
         //使用带缓冲区的高效字符流进行文件复制
        BufferedReader br = new BufferedReader(newFileReader(srcFile));
        BufferedWriter bw = new BufferedWriter(newFileWriter(desFile));
        
         char[] c = new char[1024];
         Integer len = 0;
         while((len = br.read(c)) != -1) {
             bw.write(c, 0, len);
 }
         
         //方式二
         /*String s = null;
 while((s = br.readLine()) != null) {
 bw.write(s);
 bw.newLine();
 }*/
         
 br.close();
 bw.close();
}

8、使用FileChannel复制

Java NIO包括transferFrom方法,根据文档应该比文件流复制的速度更快文章来源地址https://www.toymoban.com/news/detail-461672.html

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(); 
  } 
} 

到了这里,关于Java文件复制多种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • outputStream(输出流)转inputstream(输入流)以及输入流如何复用

    需求: 通过MultipartFile 上传文件到文件服务器,上传前要把文件转为pdf格式进行上传,并生成文件摘要用来验证服务器中的文件是否被篡改。 准备: 需要涉及到 inputstream(输入流)或outputStream(输出流)要使用两次 。 一、如果该文件本身就是pdf格式则直接进行上传。第一次

    2024年02月14日
    浏览(31)
  • java的InputStream获取字节大小相关方法

    正常大部分项目都是使用的Spring,而Spring已经帮我们开发好了相应的工具类,我们直接调用即可。 2.1 不推荐理由 可以看一下方法注释: 大致意思是返回的字节数可能由于网络原因阻塞一次只能返回部分字节或者另外一个线程也读了导致返回部分字节,也就是说如果使用av

    2024年02月07日
    浏览(37)
  • 在java中将inputStream对象转换为File对象(不生成本地文件)

    需求说明 在后端中通过POI生成Excel文件流,将输出流(outputStream)转为输入流(inputStream)后又需要将输入流(inputStream)转为File对象 问题:如果需要将输入流(inputStream)转为File对象,则必须要根据本地路径去生成一个File对象才行,也就是说不管怎样本地都必须要生成出来

    2024年02月15日
    浏览(42)
  • Java对文件的写入和读取 (File类详解以及Input,OutputStream用法,注意事项)

    Java中,操作文件的类有很多, 核心的部分是File类,InputStream,OutputStream类 我们先来看看 File 类中的常见属性、构造方法和方法 属性 修饰符及类型 属性 说明 static String pathSeparator 依赖于系统的路径分隔符,String 类型的表示 static char pathSeparator 依赖于系统的路径分隔符,char 类型的

    2024年02月09日
    浏览(32)
  • 【Java SE】判断两个文件内容是否相同的多种方法

    逐字节比较文件内容。这种方法适用于小文件,但对于大文件会比较耗时。 计算文件的哈希值(如 MD5、SHA-256 等),然后比较两个文件的哈希值。如果哈希值相同,则可以认为文件内容相同。这种方法适用于大文件,因为只需要比较哈希值而不是整个文件内容。 通过使用

    2024年02月07日
    浏览(45)
  • Matlab之创建空数组的多种方法汇总

    在 MATLAB 中,空数组是 指没有元素的数组对象 。它可以用于占位或者作为容器,等待后续添加元素。 这些方法可以根据需要选择适合的空数组类型。

    2024年02月09日
    浏览(27)
  • Android文件基本操作(创建文件(夹)、复制文件(夹)、设置文件访问权限)

    将src目录下的info.txt复制到dst目录并重命名为info_dst.txt 1、 方法一:调用java.nio.file.Files.copy() 2、方法二:使用输入输出流 1、删除文件 只需要调用File的delete方法即可删除指定文件 2、删除文件夹 如果文件夹不为空,调用delete方法是无法删除文件夹的。需要先删除文件夹中包含

    2024年02月01日
    浏览(76)
  • C# 文件操作(复制、移动、重命名、创建、打开、删除)

    目录 一、简介 二、创建文件 三、写入文件 四、读取文件 五、复制文件 六、移动文件 七、重命名文件 八、删除文件 结束 C#中的IO(Input/Output)操作包括读取和写入文件、读取和写入流、以及操作目录和文件夹等。这些操作都可以通过System.IO命名空间中的类实现。下面对C

    2024年02月01日
    浏览(35)
  • Azure ML 机器学习: 创建 Workspace 以及获得 Workspace 的多种方法

    记录三种创建Azure Machine Learning Workspace的方法:Azure Portal, Azure Python SDK,Azure CLI,以及获得当前workspace的两个方法。 一般我们有三种办法创建 Azure Machine Learning Workspace(当然,前提是我们要有一个Azure的账号)。 1.1 通过 Azure Portal 我们可以直接通过Azure的前端:Azure Portal进行

    2024年02月05日
    浏览(32)
  • Java实现方法接口入参同时包含文件、字段和对象等多种类型。HTTP请求返回415状态,Content type ‘application/octet-stream‘ not supported错误。

    方法一:对象不使用注解 使用Postman测试,直接将subject对象的字段填在key的位置 方法二:对象使用注解@RequestPart 使用Postman测试,将字段包装在subject对象里,使用Content type:application/json的内容类型 注:方法二在开发本地测试执行成功,但是在测试人员机子下不通过,执行报

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包