精华内容
下载资源
问答
  • 原标题:Java实现文件复制四种方式 有很多的Java初学者对于文件复制的操作总是搞不懂,下面动力节点java学院小编将为大家分享Java实现文件复制四种方式都是哪些?实现方式一:使用FileInputStream/...

    原标题:Java实现文件复制的四种方式

    a95b09af90c46195cb3eadb38ef4a99b.png

    有很多的Java初学者对于文件复制的操作总是搞不懂,下面动力节点java学院小编将为大家分享Java实现文件复制的四种方式都是哪些?

    实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操作

    private static void streamCopyFile(File srcFile, File desFile) throws IOException {

    // 使用字节流进行文件复制

    FileInputStream fi = new FileInputStream(srcFile);

    FileOutputStream fo = new FileOutputStream(desFile);

    Integer by = 0;

    //一次读取一个字节

    while((by = fi.read()) != -1) {

    fo.write(by);

    }

    fi.close();

    fo.close();

    }

    实现方式二:使用BufferedInputStream/BufferedOutputStream高效字节流进行复制文件

    private static void bufferedStreamCopyFile(File srcFile, File desFile) throws IOException {

    // 使用缓冲字节流进行文件复制

    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));

    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(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();

    }

    实现方式三:使用FileReader/FileWriter字符流进行文件复制。(注意这种方式只能复制只包含字符的文件,也就意味着你用记事本打开该文件你能够读懂)

    private static void readerWriterCopyFile(File srcFile, File desFile) throws IOException {

    // 使用字符流进行文件复制,注意:字符流只能复制只含有汉字的文件

    FileReader fr = new FileReader(srcFile);

    FileWriter fw = new FileWriter(desFile);

    Integer by = 0;

    while((by = fr.read()) != -1) {

    fw.write(by);

    }

    fr.close();

    fw.close();

    }

    实现方式四:使用BufferedReader/BufferedWriter高效字符流进行文件复制(注意这种方式只能复制只包含字符的文件,也就意味着你用记事本打开该文件你能够读懂)

    private static void bufferedReaderWriterCopyFile(File srcFile, File desFile) throws IOException {

    // 使用带缓冲区的高效字符流进行文件复制

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

    BufferedWriter bw = new BufferedWriter(new FileWriter(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();

    }

    以上就是动力节点java学院小编介绍的"Java实现文件复制的四种方式"的内容,分别使用字节流、高效字节流、字符流、高效字符流四种方式实现文件复制的方法,希望以上内容对大家有帮助,更多精彩内容请关注动力节点java学院官网。返回搜狐,查看更多

    责任编辑:

    展开全文
  • 四种复制文件方法

    2021-04-22 18:43:25
    但是,复制文件是平时文件操作中一个重要的功能,本文给出四种比较流行的文件复制方法。1. 使用FileStreamclass="java">private static void copyFileUsingFileStreams(File source, File dest) throws IOExce...

    尽管Java提供了一个类ava.io.File用于文件的操作,但是该类不包括文件的复制操作。但是,复制文件是平时文件操作中一个重要的功能,本文给出四种比较流行的文件复制方法。

    1. 使用FileStream

    class="java">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();

    }

    }

    ?

    2. 使用FileChannel?monospace, serif; background: #ffff99;">java.nio.channels.FileChannel

    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. 使用Apache Commons IO

    private static void copyFileUsingApacheCommonsIO(File source, File dest)

    throws IOException {

    FileUtils.copyFile(source, dest);

    }

    ?

    4. 使用Java 7 Files?Files

    ?

    private static void copyFileUsingJava7Files(File source, File dest)

    throws IOException {

    Files.copy(source.toPath(), dest.toPath());

    }

    ?

    更多的例子请参考:http://thecodesample.com/

    展开全文
  • 在这里,我们将了解学习可以在java中复制文件四种不同方法方法一:使用Stream这是java中传统的文件复制方式。这里创建两个文件 - source和destination。然后从source创建InputStream并使用OutputStream将它写入...

    Java拷贝文件是一种非常常见的操作。但是java.io.File类没有任何快捷方法可以将文件从源复制到目标文件。在这里,我们将了解学习可以在java中复制文件的四种不同方法。

    方法一:使用Stream

    这是java中传统的文件复制方式。这里创建两个文件 - source和destination。然后从source创建InputStream并使用OutputStream将它写入destination文件以进行复制文件操作。

    下面是使用流来复制文件的示例代码。

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

    }

    }

    方法二:使用java.nio.channels.FileChannel类

    Java NIO类在Java 1.4中引入,FileChannel类可用于复制文件。它的transferFrom()方法就可以完成,这种复制文件的方式应该比Stream复制文件更快。

    以下是使用FileChannel复制文件的示例代码。

    private static void copyFileUsingChannel(File source, File dest) throws IOException {

    FileChannel sourceChannel = null;

    FileChannel destChannel = null;

    try {

    sourceChannel = new FileInputStream(source).getChannel();

    destChannel = new FileOutputStream(dest).getChannel();

    destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());

    }finally{

    sourceChannel.close();

    destChannel.close();

    }

    }

    方法三: 使用FileUtils

    可通过使用Apache Commons IO中的FileUtils.copyFile(File srcFile,File destFile)可用于复制文件。如果已经在项目中使用Apache Commons IO,那么使用它来简化代码是比较容易的。在内部它使用Java NIO FileChannel,因此如果尚未将它用于其他功能,则可以避免使用此包方法。

    以下是使用apache commons io进行java复制文件操作的示例代码。

    private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {

    FileUtils.copyFile(source, dest);

    }

    方法四:使用Files类

    如果使用Java 7或更高版本,则可以使用Files类的copy()方法复制文件。它使用文件系统提供程序来复制文件。

    private static void copyFileUsingJava7Files(File source, File dest) throws IOException {

    Files.copy(source.toPath(), dest.toPath());

    }

    知道上面哪个复制方法是最快的吗?下面编写了一个测试类并逐个执行上面的方法,用于1GB的复制文件。在每次调用中,使用不同的文件来避免因为缓存而对以后的方法带来偏差。

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.OutputStream;

    import java.nio.channels.FileChannel;

    import java.nio.file.Files;

    import org.apache.commons.io.FileUtils;

    public class JavaFile {

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

    File source = new File("D:/users/maxsu/tmp/source.avi");

    File dest = new File("D:/users/maxsu/tmp/dest.avi");

    // 使用常规方式(Stream)复制文件

    long start = System.nanoTime();

    copyFileUsingStream(source, dest);

    System.out.println("Time taken by Stream = "+(System.nanoTime()-start));

    //使用java.nio FileChannel复制文件

    source = new File("D:/users/maxsu/tmp/sourceChannel.avi");

    dest = new File("D:/users/maxsu/tmp/destChannel.avi");

    start = System.nanoTime();

    copyFileUsingChannel(source, dest);

    System.out.println("Time taken by Channel = "+(System.nanoTime()-start));

    // 使用 apache commons io复制文件

    source = new File("D:/users/maxsu/tmp/sourceApache.avi");

    dest = new File("D:/users/maxsu/tmp/destApache.avi");

    start = System.nanoTime();

    copyFileUsingApacheCommonsIO(source, dest);

    System.out.println("Time taken by Apache Commons IO = "+(System.nanoTime()-start));

    // 使用 Java 7 Files类复制文件

    source = new File("D:/users/maxsu/tmp/sourceJava7.avi");

    dest = new File("D:/users/maxsu/tmp/destJava7.avi");

    start = System.nanoTime();

    copyFileUsingJava7Files(source, dest);

    System.out.println("Time taken by Java7 Files = "+(System.nanoTime()-start));

    }

    }

    下面是上述程序的输出,请注意在上面的代码中注释,以确保每次只有一个方法用于java文件复制操作。

    Time taken by Stream = 44582575000

    Time taken by Channel = 104138195000

    Time taken by Apache Commons IO = 108396714000

    Time taken by Java7 Files = 89061578000

    从输出中可以清楚地看出,Stream复制是在Java中复制文件的最佳方式。但这是一个非常基本的测试。如果开发一个性能密集型项目,那么应该尝试不同的复制文件方法,并记下时间,以找出项目的最佳方法。

    ¥ 我要打赏

    纠错/补充

    收藏

    加QQ群啦,易百教程官方技术学习群

    注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

    展开全文
  • 文章目录文件复制四种方式 文件复制四种方式 以图片文件为例: FileInputStream与FileOutputStream组合,读取图片文件到输入流中,输入流遍历,循环写入输出流信息,输出流指向文件并生成文件 FileInputStream...

    Java工程师知识树 / Java基础



    文件复制的四种方式

    以图片文件为例:

    1. FileInputStreamFileOutputStream组合,读取图片文件到输入流中,输入流遍历,循环写入输出流信息,输出流指向文件并生成文件
    2. FileInputStreamFileOutputStream组合之后,再通过BufferedInputStreamBufferedOutputStream包装,然后再进行读取写入操作。
      使用InputStreamOutputStream复制文件的步骤为:
      1. 创建一个字节输入流对象,构造方法中绑定要读取的数据源
      2. 创建一个字节输出流对象,构造方法中绑定要写入的目的地
      3. 使用字节输入流对象中的方法read读取文件
      4. 使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
      5. 释放资源
    3. 使用工具类,例如:hutool工具FileUtil.copyFilesFromDir();底层使用的是java.nio.file.Files.copy()
    4. 使用NIO复制FileChannel.transferFrom方法
    import cn.hutool.core.io.FileUtil;
    
    import java.io.*;
    import java.nio.channels.FileChannel;
    
    public class CopyFile {
    
        public static void main(String[] args) {
            File fileCopyFileStream = new File("E:\\document\\io\\深入Nginx100讲脑图_copyFileStream.jpg");
            File fileCopyBufferedFileStream = new File("E:\\document\\io\\深入Nginx100讲脑图_copyBufferedFileStream.jpg");
            File fileCopyHutool = new File("E:\\document\\io\\深入Nginx100讲脑图_hutool.jpg");
            File fileCopyNio = new File("E:\\document\\io\\深入Nginx100讲脑图_nio.jpg");
    
            if (fileCopyFileStream.exists()) {
                try {
                    fileCopyFileStream.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            File file = new File("E:\\document\\io\\深入Nginx100讲脑图.jpg");
    
            long start1 = System.currentTimeMillis();
            fileCopyFileStream(file,fileCopyFileStream);
            long hTime = System.currentTimeMillis() - start1;
    
            System.out.println("不使用Buffered所花时间:"+hTime);
            long start3 = System.currentTimeMillis();
            fileCopyBufferedFileStream(file,fileCopyBufferedFileStream);
            long hbTime = System.currentTimeMillis() - start3;
            System.out.println("使用Buffered所花时间:"+hbTime);
    
            long start5 = System.currentTimeMillis();
            FileUtil.copyFilesFromDir(file, fileCopyHutool, true);
            long huTime = System.currentTimeMillis() - start5;
            System.out.println("使用hutool工具所花时间:"+huTime);// 底层使用java.nio.file.Files.copy()方法
    
            long start7 = System.currentTimeMillis();
            copyByNio(file,fileCopyNio);
            long nioTime = System.currentTimeMillis() - start7;
            System.out.println("使用NIO所花时间:"+nioTime);
        }
    
        public static void fileCopyFileStream(File file,File fileCopyFileStream) {
    
            try (
                    FileInputStream inputStream = new FileInputStream(file);
                    FileOutputStream outputStream = new FileOutputStream(fileCopyFileStream)
            ) {
                byte[] arr = new byte[1024];
                int len ;
                while ((len = inputStream.read(arr)) != -1) {
                    outputStream.write(arr, 0, len);
                }
                outputStream.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static void fileCopyBufferedFileStream(File file,File fileCopyFileStream) {
    
            try (
                    FileInputStream fis = new FileInputStream(file);
                    BufferedInputStream bufferedInputStream = new BufferedInputStream(fis);
                    FileOutputStream fos = new FileOutputStream(fileCopyFileStream);
                    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fos)
            ) {
                byte[] arr = new byte[1024];
                int len ;
                while ((len = bufferedInputStream.read(arr)) != -1) {
                    bufferedOutputStream.write(arr, 0, len);
                }
                bufferedOutputStream.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static void copyByNio(File file,File fileCopyNio) {
    
            try(
                    FileInputStream fileInputStream = new FileInputStream(file);
                    FileOutputStream fileOutputStream = new FileOutputStream(fileCopyNio);
            ) {
                FileChannel input =  fileInputStream.getChannel();
                FileChannel output =  fileOutputStream.getChannel();
                output.transferFrom(input, 0, input.size());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    打印结果:

    不使用Buffered所花时间:57
    使用Buffered所花时间:20
    使用hutool工具所花时间:77
    使用NIO所花时间:8
    

    复制结果:


    将上面的图片文件[深入Nginx100讲脑图.jpg]改成视频文件[微信操作服务器上的应用程序.avi]后

    执行结果:

    不使用Buffered所花时间:3029
    使用Buffered所花时间:667
    使用hutool工具所花时间:276
    使用NIO所花时间:234
    

    复制结果:

    总结:日常工作中推荐使用hutool工具类或者NIO操作文件,文本文件推荐使用带缓存输入输出流操作文件。

    展开全文
  • 1. 使用FileStreams复制这是最经典的方式将一个文件的内容复制到另一个文件中。使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B。这是第一个方法的代码:private static void ...
  • 但是没有一个复制文件方法复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候。 然而有几种方法可以进行Java文件复制操作,下面列举出4中最受欢迎的方式。1.使用FileStreams复制这是最经典的方式...
  • 一两个文件很少量的还好说,就输几个yes 进行覆盖,但是要是n多文件怎么办,手动输入也太麻烦了,主要有以下几解决办法。 方法一 为什么 rm -rf 文件或目录 就可以达到强制的效果呢,即使文件或者目录不存在也不会...
  • 如何复制文件

    2021-07-01 02:09:43
    如何复制文件发布时间:2017-04-09 22:23来源:互联网当前栏目:电脑基础知识一. 利用右键菜单复制这个方法与前面移动文件夹的方法非常相似,只是选择的是右键菜单中的“复制”而不是“剪切”,后面的操作是一样的。...
  • 转载自:http://jingyan.baidu.com/article/ff4116259c2d7712e4823780.html在Java编程中,复制文件方法有很多,而且经常要用到。我以前一直是缓冲输入输出流来实现的(绝大多数人都是如此),近来在研究JDK文档时发 ...
  • linux复制文件并修改文件名

    千次阅读 2021-05-09 06:44:02
    /bin/bash#复制/casnw/backup/db203oradata/目录下的所有后缀名为dmp的文件拷贝到/casnw/backup/dbmonthbak 目录下cp -f /casnw/backup/db203oradata/*.dmp /casnw/backup/dbmonthbak#将/casnw/backup/dbmonthbak/...
  • 下面是学习啦小编为大家整理的关于电脑u盘文件无法复制的解决方法,一起来看看吧!电脑u盘文件无法复制的解决方法一、U盘分区损坏原因分析:没有安全删除硬件就直接拔掉u盘或感染病毒等,都有可能导致磁盘分区表信息...
  • 如何复制文件某天小编想要同事B共享文件夹hp1000中的read1st.txt文件。现在我复制它到我的电脑中的F:盘中来。第一步:打开桌面的网上邻居(如下图)第二步:打开网上邻居中共享文件夹。第三步:打开贡献文件夹中的...
  • java怎么复制文件

    2021-03-05 13:29:56
    java中复制文件方法:(推荐:java视频教程)一、使用FileStreams复制这是最经典的方式将一个文件的内容复制到另一个文件中。 使用FileInputStream读取文件A的字节,使用FileOutputStream写入到文件B。 这是第一个...
  • 操作系统实验 文件复制/复制文件

    千次阅读 2021-01-09 16:37:34
    操作系统课程设计 文件复制实验报告 一、实验目的 1、熟悉Linux文件系统提供的有关文件操作的系统调用。文件系统是使用计算机信息系统的重要接口,通过使用文件系统的系统调用命令操作文件,以达到对文件系统实现...
  • 文件四种读取方法

    千次阅读 2021-04-03 13:24:07
    当调用该函数时,文件指针返回它指向的字符,接着文件指针前进到下个字符。该调用函数返回一个文件缓冲区读出字符的整数值。 例子: int date; while((date=fgetc(fp)!=EOF)//其中fp为文件指针 { printf("%d\n...
  • CMake复制文件

    2021-10-12 10:33:44
    3. 编译时判断平台,复制文件。 这里主要讲第三种方法。 CMake复制文件: 1. 编译前复制文件:调用shell命令 在CMakeLists.txt中加入如下语句: if (${CMAKE_SYSTEM_NAME} STREQUAL "XXX平台") #XXX平台可以...
  • 在/etc下面的找大于1M的文件复制到/tmp下面。mkdir /tmp/dir{a..d} #/tmp/a /tmp/b /tmp/c /tmp/d第一步:找到这些文件find /etc/ -type f -size +1M/etc/selinux/targeted/modules/active/policy.kern/etc/...
  • win10系统打开iso格式文件四种方法

    千次阅读 2021-01-30 14:22:16
    许多用户在win10系统中下载一个ISO文件...接下去分享win10系统打开iso格式文件四种方法。何为iso文件?iso,国际标准光盘文件系统格式。符合ISO 9660标准的光盘镜像文件格式,文件扩展名通常为iso。这种文件可以简...
  • mysql复制知识整理

    2021-02-02 01:35:56
    2)配置slave服务器/etc/my.cnf文件将以下配置启用:server-id=2 从服务器ID号,不要和主ID相同,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。...
  • 方法一:复制代码 代码如下:f = open("foo.txt") # 返回一个文件对象line = f.readline() # 调用文件的 readline()方法while line:print line, # 后面跟 ',' 将忽略换行符# print(line, end = '') # 在 Python ...
  • Java压缩、复制文件及解压zip

    千次阅读 2021-02-21 20:13:51
    Java压缩、复制文件及解压zip 该文件工具类基于java 8,实现了文件的压缩、解压以及复制等操作(无需引入其它的依赖即可使用);同时给出后端压缩文件传给前端的示例,以及重载、性能优化的思路,可以根据具体的业务...
  • Linux 命令之 cp -- 复制文件或目录

    千次阅读 2021-06-03 14:18:14
    cp file1 file2 复制一个文件 cp dir/* . 复制一个目录下的所有文件到当前工作目录 cp -a /tmp/dir1 . 复制一个目录到当前工作目录 cp -a dir1 dir2 复制一个目录
  • Centos7复制文件显示进度

    千次阅读 2021-01-12 11:06:00
    有些时候需要拷贝大量文件,或者是数据库的物理备份,都需要使用cp命令,但是系统自带cp命令不支持显示进度。这时,我们可以通过另外安装的方式,来查看复制或者移动的进度。
  • 4.写文件的6种方法 方法 1:FileWriter 方法 2:BufferedWriter 小知识点:缓冲区 方法 3:PrintWriter 方法 4:FileOutputStream 方法 5:BufferedOutputStream 方法 6:Files 5.性能测试 6.扩展知识:...
  • 5.PHP文件包含

    2021-04-09 09:33:07
    思考:PHP的函数要求是函数必须在内存中才能调用,但是函数是一个一个写在对应的PHP文件中的,那其他文件中的代码必须要复制代码过来才能访问吗?引入:如果一个文件中对应的功能已经写好了,那么想要在其他PHP文件...
  • cp复制命令(copy的简写)1、cp命令作用cp用于复制文件或目录2、cp命令语法cp [options] sourcedir destdir参数说明:-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR...
  • 一、文件/文件夹创建1、文件的创建 touch , vi/vim/nano , ...语 法:touch [-acfm][-d ][-r ][-t ] [--help] [--version][文件或目录...] 或touch [-acfm][--help][--version][日期时 间][文件或目录...]补充说明:...
  • 1、首先复制第一个文件到此文件夹。2、复制第二个文件到此文件夹,系统会自动给出提示,如图:3、选择“复制,但保留这两个文件”。则第二个被复制过去的文件自动被系统命名为“文件名(2)”以示与第一个文件的区别。...
  • 步:把你所需要的其他目录中的文件进行复制,并且粘贴到当前的这个目录中 或者:也可以在当前目录窗口中删掉不想要的文件 用sudo 后面接你要执行的命令 方法二: 使sudo命令,获得临时管理员的权限 如要复制/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 536,730
精华内容 214,692
关键字:

复制文件的四种方法