iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java 文件拷贝的四种方式
  • 922
分享到

java 文件拷贝的四种方式

javaservletjvm 2023-09-02 09:09:06 922人浏览 泡泡鱼
摘要

1. java 移动文件的方式有几种? 在 Java 中,可以使用多种方法来移动文件。 //使用 java.NIO.file.Files 类的 move() 方法:import java.nio.fi

1. java 移动文件的方式有几种?

在 Java 中,可以使用多种方法来移动文件。

//使用 java.NIO.file.Files 类的 move() 方法:import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;public class Main {    public static void main(String[] args) throws Exception {        Path source = Paths.get("/path/to/source/file.txt");        Path target = Paths.get("/path/to/target/file.txt");        Files.move(source, target);    }}
//使用 java.io.File 类的 renameTo() 方法:import java.io.File;//使用示例public class Main {    public static void main(String[] args) {        File source = new File("/path/to/source/file.txt");        File target = new File("/path/to/target/file.txt");        source.renameTo(target);    }}//完整工具类方法封装    public static boolean renameFileTo(String oldPath, String newPath) {        Log.d(TAG, "renameFileTo: oldPath=" + oldPath + " newPath=" + newPath);        File source = new File(oldPath);        if (!source.exists()) {            Log.d(TAG, "renameFileTo: Source file not exits!");            return false;        }        File target = new File(newPath);        File targetPatenFile = target.getParentFile();        if (!targetPatenFile.exists()) {            boolean mkdirResult = targetPatenFile.mkdirs();            Log.d(TAG, "renameFileTo: Target parent file not exits! targetPatenFile=" + targetPatenFile);            Log.d(TAG, "renameFileTo: Target parent file mkdir! mkdirResult=" + mkdirResult);        }        boolean result = source.renameTo(target);        Log.d(TAG, "renameFileTo: result=" + result);        return result;    }
//使用 Apache Commons IO 库的 FileUtils.moveFile() 方法:import org.apache.commons.io.FileUtils;public class Main {    public static void main(String[] args) throws Exception {        File source = new File("/path/to/source/file.txt");        File target = new File("/path/to/target/file.txt");        FileUtils.moveFile(source, target);    }}

请注意,如果目标文件已经存在,则会覆盖该文件。如果要保留目标文件,可以使用 moveFileToDirectory() 方法将文件移动到目标目录,并使用新的文件名。

import org.apache.commons.io.FileUtils;public class Main {    public static void main(String[] args) throws Exception {        File source = new File("/path/to/source/file.txt");        File targetDir = new File("/path/to/target/directory");        String newFileName = "new_file_name.txt";        FileUtils.moveFileToDirectory(source, targetDir, newFileName);    }}

这些方法都可以用来移动文件。使用哪种方法取决于你的需求和偏好。

2. 上面这几种方式,比文件流拷贝效率高吗?

在大多数情况下,使用 java.nio.file.Files.move() 或 Apache Commons IO 库的 FileUtils.moveFile() 方法移动文件都要比使用文件流拷贝文件高效。这是因为,这些方法可以在操作系统层面上直接移动文件,而无需拷贝文件内容。
相比之下,使用文件流拷贝文件需要读取源文件的内容,并将其写入目标文件。这样做需要消耗额外的时间和资源,因此通常不会作为移动文件的首选方法。
但是,如果你希望保留源文件,并且希望在拷贝文件时对其进行某些操作,则可以使用文件流拷贝文件。例如,你可以使用文件流拷贝文件并在拷贝过程中对文件内容进行修改。
总的来说,如果你只是希望移动文件,则使用 java.nio.file.Files.move() 或 Apache Commons IO 库的 FileUtils.moveFile() 方法是最高效的选择。但是,如果你希望对文件进行某些操作,则可以使用文件流拷贝文件。

3. Files.move 和 File.renameTo 有什么区别?

java.nio.file.Files.move() 和 java.io.File.renameTo() 是两种在 Java 中移动文件的方法。它们之间有一些区别:
java.nio.file.Files.move() 方法是在 Java 7 中引入的,它属于 Java 的新 I/O api (NIO.2),使用了基于路径的方法来处理文件系统。相比之下,java.io.File.renameTo() 方法是在早期版本的 Java 中引入的,它使用了基于文件的方法来处理文件系统。
java.nio.file.Files.move() 方法提供了更多的选项,可以指定文件移动时的行为。例如,你可以指定当目标文件已经存在时是否覆盖它,或者是否在移动文件时保留其源文件的权限和属性。相比之下,java.io.File.renameTo() 方法没有这些选项。
java.nio.file.Files.move() 方法支持在不同文件系统之间移动文件。例如,你可以使用它在 windowslinux 之间移动文件。相比之下,java.io.File.renameTo() 方法只能在同一文件系统内移动文件。
总的来说,如果你需要在不同文件系统之间移动文件,或者希望在移动文件时使用更多的选项,则应使用 java.nio.file.Files.move() 方法。如果你只需要在同一文件系统内移动文件,并且希望使用简单的方法,则可以使用 java.io.File.renameTo() 方法。
但是,请注意,java.io.File.renameTo() 方法在某些情况下可能不起作用。例如,如果你在 Windows 上尝试使用该方法移动文件时,它可能会失败,因为 Windows 在打开文件时会占用该文件,并阻止对其进行更改。在这种情况下,使用 java.nio.file.Files.move() 方法可能会更加可靠。

4. java 文件夹拷贝

@RequiresApi(api = Build.VERSION_CODES.O)    public static void copyFolder(String source, String target) {        final Path sourcePath = Paths.get(source);        final Path targetPath = Paths.get(target);        try {            Files.walkFileTree(sourcePath, new SimpleFileVisitor() {                @Override                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {                    Path targetFile = targetPath.resolve(sourcePath.relativize(file));                    Files.copy(file, targetFile, StandardCopyOption.REPLACE_EXISTING);                    return FileVisitResult.CONTINUE;                }                @Override                public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {                    Path targetDir = targetPath.resolve(sourcePath.relativize(dir));                    Files.createDirectory(targetDir);                    return FileVisitResult.CONTINUE;                }            });        } catch (IOException e) {            Log.d(TAG, "copyFolder:IOException: " + e.getMessage());            e.printStackTrace();        }    }

5. 压缩多个文件到一个zip包中

    public static void zipFiles(List<String> filePaths, String targetZipPath) throws IOException {        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(targetZipPath))) {            for (String filePath : filePaths) {                File file = new File(filePath);                try (FileInputStream fileInputStream = new FileInputStream(file)) {                    ZipEntry zipEntry = new ZipEntry(file.getName());                    zipOutputStream.putNextEntry(zipEntry);                    byte[] bytes = new byte[1024];                    int length;                    while ((length = fileInputStream.read(bytes)) >= 0) {                        zipOutputStream.write(bytes, 0, length);                    }                }            }        }    }

6. 总结

Android 单一平台,直接使用 renameTo 就可以;
如果需要跨平台拷贝,或者自定义是否覆盖目标文件,是否保留源文件,那就使用 Files.move;
上面两种方式都比通过文件流拷贝效率要高。

来源地址:https://blog.csdn.net/u013168615/article/details/128445550

--结束END--

本文标题: java 文件拷贝的四种方式

本文链接: https://www.lsjlt.com/news/390472.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java 文件拷贝的四种方式
    1. java 移动文件的方式有几种? 在 Java 中,可以使用多种方法来移动文件。 //使用 java.nio.file.Files 类的 move() 方法:import java.nio.fi...
    99+
    2023-09-02
    java servlet jvm
  • 详解Java数组的四种拷贝方式
    目录深拷贝与浅拷贝的区别1. for循环进行拷贝拷贝数值类型拷贝引用类型2. copyof / copyOfRange拷贝数值类型拷贝引用类型3. arraycopy拷贝数值类型拷贝...
    99+
    2022-11-13
  • javascript进阶篇深拷贝实现的四种方式
    目录概念介绍第一种:递归方式(推荐,项目中最安全最常用)第二种:JSON.stringify() ;(这个不推荐使用,有坑)第三种:使用第三方库lodash中的cloneDeep()...
    99+
    2022-11-13
  • JAVA几种方式实现深拷贝
    JAVA几种方式实现深拷贝 准备 定义两个类用于测试拷贝,类内容如下,目的是深拷贝一个User类的对象: @Data@Accessors(chain = true)public class User ...
    99+
    2023-09-05
    Java 拷贝 深拷贝 浅拷贝
  • java中关于深拷贝的几种方式
    在java里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。 浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化。深拷贝则是拷贝了源对象的所有值,所以即使源对象的值发生变化时,拷贝对象的值也不会改...
    99+
    2023-08-31
    java jvm 开发语言
  • 浅拷贝的三种实现方式
    1、ES6的方法 Object.assign()  作用:将第二个参数及以后的参数合并到第一个对象里。 参数1:target 参数2:对象…… 参数3:对象…. 例:       var obj = {a:{name:”kaiqin”,ag...
    99+
    2023-10-29
    三种 方式
  • Python中浅拷贝的四种实现方法小结
    目录方式一:使用切片 [:] 方式二:使用工厂函数方式三:使用数据类型自带的 copy 方法 方式四:使用 copy 模块的 copy 方法 方式一:使用切片 [:] 列表 #...
    99+
    2022-11-12
  • vue深拷贝的3种实现方式小结
    目录1、通过递归方式实现深拷贝2、JSON.parse(JSON.stringify(obj))3、jQuery的extend方法实现深拷贝拓展阅读vue深拷贝的其他实现方式总结vu...
    99+
    2023-02-21
    vue深拷贝的三种实现方式 vue实现深拷贝 vue 深拷贝
  • Java实现InputStream的任意拷贝方式
    Java InputStream的任意拷贝 有时候,当我们需要多次使用到同一个InputStream的时候如何实现InputStream的拷贝使用 我们可以把InputStream首...
    99+
    2022-11-12
  • Java数组的拷贝方式有哪些
    这篇文章主要介绍了Java数组的拷贝方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。深拷贝与浅拷贝的区别假设现在有原数组A以及拷贝后的数组B,若是改变A中的某一个值,...
    99+
    2023-06-29
  • Java下载文件的四种方式详细代码
    1.以流的方式下载 public HttpServletResponse download(String path, HttpServletResponse response) ...
    99+
    2022-11-12
  • python拷贝文件的方法有哪些
    Python拷贝文件的方法有以下几种:1. 使用shutil模块的copy()函数:```pythonimport shutilsh...
    99+
    2023-08-15
    python
  • Linux文件拷贝的方法是什么
    这篇文章主要介绍“Linux文件拷贝的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux文件拷贝的方法是什么”文章能帮助大家解决问题。在 Linux 中,cp 命令常被用于从一个文件...
    99+
    2023-06-28
  • java零拷贝的实现方式有哪些
    Java 的零拷贝(Zero-copy)是指在数据传输过程中,避免将数据从一个缓冲区复制到另一个缓冲区,从而提高数据传输的效率。Ja...
    99+
    2023-09-23
    java
  • java深拷贝的实现方式有哪些
    在Java中,深拷贝可以通过以下几种方式来实现:1. 实现Cloneable接口并重写clone()方法:Cloneable接口标记...
    99+
    2023-08-08
    java
  • java零拷贝的实现方式是什么
    本篇内容主要讲解“java零拷贝的实现方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java零拷贝的实现方式是什么”吧!1.什么是零拷贝零拷贝字面上的意思包括两个,“零”和“拷贝”:“...
    99+
    2023-06-29
  • Linux拷贝文件夹的方法有哪些
    在Linux中,有多种方法可以拷贝文件夹。以下是其中一些常见的方法:1. 使用cp命令:cp -r 源文件夹 目标文件夹。这将递归地...
    99+
    2023-10-23
    Linux
  • 5种Java中数组的拷贝方法总结分享
    目录1、for循环2、调用clone()方法3、Arrays类中的Arrays.copyOf()方法4、copyOfRange()方法5、System.arraycopy()方法1、...
    99+
    2022-11-13
  • Java的四种引用方式
    目录1.强引用(StrongReference)2.软引用(SoftReference)3.弱引用(WeakReference)4.虚引用(PhantomReference)5.&n...
    99+
    2022-11-12
  • Go语言读取文件的四种方式
    目录前言整个文件读取按行读取逐个单词读取以数据块的形式读取文件二进制读取总结前言 这篇文章将讨论如何在 Golang 中读取文件。我们将使用以下包来处理这些文件。 os 包提供了一个...
    99+
    2023-05-15
    Go 读取文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作