精华内容
下载资源
问答
  • Java 文件复制

    千次阅读 2019-05-08 21:01:47
    文件复制可能在电脑上直接Ctrl+C和Ctrl+V就可以把文件和文件里面的信息都复制到选择复制的文件夹,这个过程是很简单的;而在java里面通过代码去实现就不是很简单了,下面我就把我在java中实现复制的过程步骤讲一下:...

             文件复制可能在电脑上直接Ctrl+C和Ctrl+V就可以把文件和文件里面的信息都复制到选择复制的文件夹,这个过程是很简单的;而在java里面通过代码去实现就不是很简单了,下面我就把我在java中实现复制的过程步骤讲一下:

    :Oid代表被复制的文件,New代表要复制到的文件夹;

    第一步:获取文件路径,判断一下New的路径里面有没有这个同名的文件,没有就新建一个;

    第二步:获取Oid下的子目录和子文件名称,如果是目录就到New里面创建目录,并且进行再次调用自身(递归),如果是文件就进行文件内容的复制;

    第三步:建一个字节数组来存储一次读取的数据(文件数据的复制都是先转化为字节类型在进行复制,对于电脑来说图片和视频这些就是一些字符串或者也可以说是数字),然后通过while进行读取和输出;

    第四步:打开流就要进行关闭,还有一点很重要,通过flush方法强制把数据输出,把缓存区就清空了;

    代码部分:

    第一步:调用;

     

    我把复制的主要部分进行了封装,这样就可以在全局使用文件复制,直接通过类就可以调用文件复制的方法;这里就是调用的封装的方法,EncapsulatedClass是封装的类名,copyFile就是文件复制的方法名称,这样封装的好处就是减少代码量和规范写法;

    第二步:

             主要用来获取目录名称和文件名称,和创建文件夹;而文件是不需要创建的因为在数据写入文件的时候它会判断有没有该文件,没有就创建;这里也比较繁琐,因为路径问题需要一定的拼接;而图中的OutByte(in,Out)是用来调用读取数据写入数据的方法,参数是读取和写入的路径;

     

    第三步:

             这一步的代码是用来实现数据的读取和数据的写入;

    byte[]数组是用来存储一次读取的数据,后面的数字是代表一次读取的大小,一般是1024个字节,你也可以进行修改,因为电脑的处理速度是不一样的,如果处理快的电脑可以写大一点可以加快复制的速度,但是电脑处理慢的话写的太大反而速度会变慢,所以可以根据电脑的性能去改变这个值,当然最好就是1024个字节,1024个字节相当于1kb的大小,因为电脑处理时间是于纳秒为单位,即使是1kb一次的读取大小也是很快的;

    while函数是把读取的数据进行写入到指定的文件里面,可以认为它一边读取一边写入文件里面;

    这里要关闭流是因为它不会用完自己关闭,它会一直占据在那里,消耗电脑资源,所以一定要关闭;

     

     

    结果部分:

             这里说的完成复制是指要复制的文件已经复制到指定的文件夹中,这里面可以看到有txt文件,java文件,还有图片和文件,当然图片和视频都是可以可以进行正常的打开和播放的,和源文件没有什么区别;

     

    复制过来文件的目录结构是没有发生改变的,从图片中也可以看到文件后面是有大小的,说明里面数据也是复制过来了;

         这样整个文件复制就是完成的,这样和你在电脑上面直接操作的效果是一样的,只是实现的过程不一样;

    展开全文
  • java文件复制方法Java copy file is a very common operation. But java.io.File class doesn’t have any shortcut method to copy a file from source to destination. Here we will learn about four different ...

    java文件复制方法

    Java copy file is a very common operation. But java.io.File class doesn’t have any shortcut method to copy a file from source to destination. Here we will learn about four different ways we can copy file in java.

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

    Java复制文件 (Java Copy File)

    1. Java Copy File – Stream

      Java复制文件–流

    This is the conventional way of file copy in java. Here we create two Files – source and destination. Then we create InputStream from source and write it to the destination file using OutputStream for java copy file operation.

    这是Java中文件复制的常规方式。 在这里,我们创建两个文件-源文件和目标文件。 然后,我们从源创建InputStream并使用OutputStream进行java复制文件操作,将其写入目标文件。

    Here is the method that can be used for java copy file using streams.

    这是可用于使用流的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();
        }
    }
    1. Java Copy File – java.nio.channels.FileChannel

      Java复制文件– java.nio.channels.FileChannel

    Java NIO classes were introduced in Java 1.4 and FileChannel can be used to copy file in java. According to transferFrom() method javadoc, this way of copy file is supposed to be faster than using Streams for java copy files.

    Java NIO类是在Java 1.4中引入的,FileChannel可用于在Java中复制文件。 根据transferFrom()方法javadoc,这种复制文件的方式应该比使用Streams进行Java复制文件要快。

    Here is the method that can be used to copy a file using FileChannel.

    这是可以使用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();
       }
    }
    1. Java Copy File – Apache Commons IO FileUtils

      Java复制文件– Apache Commons IO FileUtils

    Apache Commons IO FileUtils.copyFile(File srcFile, File destFile) can be used to copy file in java. If you are already using Apache Commons IO in your project, it makes sense to use this for code simplicity. Internally it uses Java NIO FileChannel, so you can avoid this wrapper method if you are not already using it for other functions.

    Apache Commons IO FileUtilscopyFile(File srcFile,File destFile)可用于在Java中复制文件。 如果您已经在项目中使用Apache Commons IO,则使用它来简化代码是很有意义的。 它在内部使用Java NIO FileChannel,因此如果尚未将其用于其他功能,则可以避免使用该包装器方法。

    Here is the method for using apache commons io for java copy file operation.

    这是将apache commons io用于Java复制文件操作的方法。

    private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {
        FileUtils.copyFile(source, dest);
    }
    1. Java Copy File – Files class

      Java复制文件–文件类

    If you are working on Java 7 or higher, you can use Files class copy() method to copy file in java. It uses File System providers to copy the files.

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

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

    Now to find out which is the fastest method, I wrote a test class and executed above methods one-by-one for copy file of 1 GB. In each call, I used different files to avoid any benefit to later methods because of caching.

    现在,找出哪种方法最快,我编写了一个测试类,并针对1 GB的副本文件逐个执行了上述方法。 在每个调用中,我都使用了不同的文件,以避免由于缓存而对以后的方法产生任何好处。

    package com.journaldev.files;
    
    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 JavaCopyFile {
    
        public static void main(String[] args) throws InterruptedException, IOException {
            File source = new File("/Users/pankaj/tmp/source.avi");
            File dest = new File("/Users/pankaj/tmp/dest.avi");
    
            //copy file conventional way using Stream
            long start = System.nanoTime();
            copyFileUsingStream(source, dest);
            System.out.println("Time taken by Stream Copy = "+(System.nanoTime()-start));
            
            //copy files using java.nio FileChannel
            source = new File("/Users/pankaj/tmp/sourceChannel.avi");
            dest = new File("/Users/pankaj/tmp/destChannel.avi");
            start = System.nanoTime();
            copyFileUsingChannel(source, dest);
            System.out.println("Time taken by Channel Copy = "+(System.nanoTime()-start));
            
            //copy files using apache commons io
            source = new File("/Users/pankaj/tmp/sourceApache.avi");
            dest = new File("/Users/pankaj/tmp/destApache.avi");
            start = System.nanoTime();
            copyFileUsingApacheCommonsIO(source, dest);
            System.out.println("Time taken by Apache Commons IO Copy = "+(System.nanoTime()-start));
            
            //using Java 7 Files class
            source = new File("/Users/pankaj/tmp/sourceJava7.avi");
            dest = new File("/Users/pankaj/tmp/destJava7.avi");
            start = System.nanoTime();
            copyFileUsingJava7Files(source, dest);
            System.out.println("Time taken by Java7 Files Copy = "+(System.nanoTime()-start));        
        }
    }

    Here is the output of the above program, note that I commented above code to make sure every time only one method is used for java file copy operation.

    这是上面程序的输出,请注意,我注释了上面的代码,以确保每次仅将一种方法用于Java文件复制操作。

    Time taken by Stream Copy = 44582575000
    Time taken by Channel Copy = 104138195000
    Time taken by Apache Commons IO Copy = 108396714000
    Time taken by Java7 Files Copy = 89061578000

    From the output, it’s clear that Stream Copy is the best way to copy File in Java. But it’s a very basic test. If you are working on a performance intensive project, then you should try out different methods for java copy file and note down the timings to figure out the best approach for your project.

    从输出中可以明显看出,Stream Copy是用Java复制File的最佳方法。 但这是一个非常基本的测试。 如果您正在处理一个性能密集型项目,则应尝试使用Java复制文件的不同方法,并记下时间安排,以找到适合您项目的最佳方法。

    You should also play around different ways of java copy files based on your average size of the file.

    您还应该根据文件的平均大小来尝试不同的Java复制文件方式。

    I have created a YouTube video for 4 ways to copy the file in java, you can watch it to learn more.

    我已经创建了一种YouTube视频,提供了4种方法来复制Java文件,您可以观看它以了解更多信息。

    演示地址

    翻译自: https://www.journaldev.com/861/java-copy-file

    java文件复制方法

    展开全文
  • java文件处理(3)——实现文件复制和文件移动

    万次阅读 多人点赞 2018-10-07 17:31:16
    通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件复制(而不是调用windows命令行的内部命令copy)。 通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件移动(而不是调用windows...

    任务要求:

    • 通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件复制(而不是调用windows命令行的内部命令copy)。
    • 通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件移动(而不是调用windows命令行的外部命令move)。

    一.文件复制

    1.介绍InputStream和OutputStream

    InputStream和OutputStream是抽象类,是所有字节输入流和输出流的父类。

    • InputStream(输入流):输入流是用来读入数据的。(读入)
    • OutputStream(输出流):输出流是用来写出数据的。(写出)
    (1)文件输入流——FileInputStream

    FileInputStream 从文件系统中的某个文件中获得输入字节。
    构造方法

    通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。public FileInputStream(File file);
    通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。public FileInputStream(String name);
    (2)文件输出流——FileOutputStream

    文件输出流是用于将数据写入到文件中。
    构造方法

    创建一个向指定 File 对象表示的文件中写入数据的文件输出流public FileOutputStream(File file);
    创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。public FileOutputStream(File file,boolean append);
    创建一个向具有指定名称的文件中写入数据的输出文件流public FileOutputStream(String name);
    创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。public FileOutputStream(String name,boolean append);

    2.进行文件复制

    代码如下:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    class CopyFile
    {
        static void copy(String srcPathStr, String desPathStr)
    	{
            //获取源文件的名称
            String newFileName = srcPathStr.substring(srcPathStr.lastIndexOf("\\")+1); //目标文件地址
            System.out.println("源文件:"+newFileName);
            desPathStr = desPathStr + File.separator + newFileName; //源文件地址
            System.out.println("目标文件地址:"+desPathStr);
            try
    		{
                 FileInputStream fis = new FileInputStream(srcPathStr);//创建输入流对象
                 FileOutputStream fos = new FileOutputStream(desPathStr); //创建输出流对象               
                 byte datas[] = new byte[1024*8];//创建搬运工具
                 int len = 0;//创建长度   
                 while((len = fis.read(datas))!=-1)//循环读取数据
    			{
    				fos.write(datas,0,len);
                } 
                    fis.close();//释放资源
                    fis.close();//释放资源
            }
    			catch (Exception e)
    			{
                    e.printStackTrace();
                }
        }
        public static void main(String[] args)
    	{     
            String srcPathStr = "E:\\java task\\zhl.txt"; //源文件地址
    		String desPathStr = "E:\\java task\\zhlll"; //目标文件地址
            copy(srcPathStr, desPathStr);//将E:\\java task\\zhl.txt文件拷贝到E:\\java task\\zhlll
        } 
    }
    

    结果如下:
    在这里插入图片描述

    二.文件移动

    1.renameTo 的使用

    (1)重命名文件

            File oldName = new File("E:\\java task\\zh.txt");
            File newName = new File("E:\\java task\\zhl.txt");
            System.out.println(oldName.renameTo(newName));//zh.txt改为zhl.txt
    

    (2)进行文件的移动操作

            File oldName = new File("E:\\java task\\zhl.txt");
            File newName = new File("E:\\java task\\zhlll\\zhl.txt");
            System.out.println(oldName.renameTo(newName));//E:\\java task\\zhl.txt移动至E:\\java task\\zhlll
    

    2.实现文件移动

    代码如下:

    import java.io.File;
    class MoveFile
    {
    	public static void main(String[] agrs)
    	{
    		try
    		{
    			File file=new File("E:\\java task\\zhl.txt"); //源文件
    			if (file.renameTo(new File("E:\\java task\\zhlll\\"+file.getName()))) //源文件移动至目标文件目录
    			{
    				System.out.println("File is moved successful!");//输出移动成功
    			}
    			else
    			{
    				System.out.println("File is failed to move !");//输出移动失败
    			}
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    	}
    }
    

    结果如下:
    在这里插入图片描述

    展开全文
  • Java OutputStream写入文件与文件复制

    万次阅读 2017-08-14 17:14:24
    文件复制示例 1. 知识点 1,首先不管是InputStream读read,还是OutputStream写write,都支持读写一定长度的byte[]。 2,当然,还支持一个字节一个字节的读写,那么一个字节一个字节的读写,读出来的字节和写入的...

    1. 知识点

    1,首先不管是InputStream读read,还是OutputStream写write,都支持读写一定长度的byte[]。

    2,当然,还支持一个字节一个字节的读写,那么一个字节一个字节的读写,读出来的字节和写入的字节都是用的int类型的参数。

    3,int参数只会使用它的8个二进制位,也就是说类似于将int强行转换为byte,我感觉很无聊的设计,还不如直接用byte作为参数,这样搞是因为int太火吗?

    4,所以所谓的复制,就是把所有的字节读出来,然后写入文件即可。

    2. 写入文件示例

    写入对象FILE_FOR_WRITE中

    //工具类
    package com.maoge.stream;
    import java.io.File;
    public class StreamUtils {
    	//用于定义每次读取的长度
    	public static final int BUFFER_LENGTH=512;
    	//文件对象
    	public static File FILE_FOR_READ;
    	public static File FILE_FOR_WRITE;
    	static{
    		FILE_FOR_READ=new File("C:\\test.txt"); 
    		FILE_FOR_WRITE=new File("C:\\result.txt"); 
    	}
    }
    

    写入过程

    package com.maoge.stream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    public class OutputStreamDemo {
    	public static void main(String[] args){
    		writeToFile();
    	}
    	public static void writeToFile(){
    		byte buffer[]=buffer=new String("hello world!").getBytes();
    		OutputStream out=null;
    		try {
    			out = new FileOutputStream(StreamUtils.FILE_FOR_WRITE);
    			out.write(buffer, 0, buffer.length);
    		} catch (Exception ex) {
    			System.out.println(ex.toString());
    		}finally{
    			try {
    				out.close();
    			} catch (IOException ioEx) {
    				System.out.println(ioEx.toString());
    			}
    		}	
    	}
    }
    

    3. 文件复制示例

    直接演示复制图片,因为图片也是二进制位组成的

    源文件test.jpg这个需要找个图片,目的文件result.jpg这个是复制后生产的

    //工具类
    package com.maoge.stream;
    import java.io.File;
    public class StreamUtils {
    	//用于定义每次读取的长度
    	public static final int BUFFER_LENGTH=512;
    	//文件对象
    	public static File FILE_FOR_READ;
    	public static File FILE_FOR_WRITE;
    	static{
    		FILE_FOR_READ=new File("C:\\test.jpg"); 
    		FILE_FOR_WRITE=new File("C:\\result.jpg"); 
    	}
    }
    

    复制过程,该方法是OutputStreamDemo类的静态方法。

    public static void fileCopy(){
    		FileInputStream in=null;
    		FileOutputStream out=null;
    		try {
    			in=new FileInputStream(StreamUtils.FILE_FOR_READ);
    			out=new FileOutputStream(StreamUtils.FILE_FOR_WRITE);
    			int c;
    			while((c=in.read())!=-1)
    				out.write(c);
    		} catch (Exception ex) {
    			System.out.println(ex.toString());
    		}finally{
    			try {
    				in.close();
    			} catch (IOException ioEx) {
    				System.out.println(ioEx.toString());
    			}
    			try {
    				out.close();
    			} catch (IOException ioEx) {
    				System.out.println(ioEx.toString());
    			}
    		}
    	}
    

    项目源码、系列教程及更多内容,请访问熊猫编程网

    展开全文
  • Java文件复制和删除

    千次阅读 2014-12-23 23:48:34
    Java文件删除和复制
  • Java实现文件复制

    千次阅读 2019-05-06 12:48:00
    Java.io实现文件复制 需求:对一个文件进行复制。 方法: 实现文件复制,实际上就是读文件+写文件,即从一个文件中读取数据然后写到另外一个文件文件: 需求:往文件中写数据 读数据--输出流--FileReader...
  • Java文件快速copy复制

    万次阅读 多人点赞 2020-12-29 16:55:18
    最近学习netty的时候发现nio包下有个FileChannel类,经过了解这个类作用是个专门负责传输文件的通道,支持多线程,而且经过测试FileChannel复制文件的速度比BufferedInputStream/BufferedOutputStream复制文件的速度...
  • JAVA复制文件最快速的方法:用文件通道的方式来进行文件复制
  • Java实现简单的文件复制功能

    千次阅读 2019-05-04 13:39:29
    1.文件复制: 从一个输入流中读取数据,然后通过输出流写入目标位置 一边读,一边写 2.代码: package com.lemon; import java.io.File; import java.io.FileInputStream; import java.io....
  • 使用Java语言如何实现快速文件复制
  • java文件普通复制和NIO复制

    千次阅读 2017-04-19 14:49:02
    自从jdk1.4以后就引入了NIO文件通道的概念,并且是由io的FileinputStream...File Copyfile 复制文件File newfile 新文件 1.传统IO复制 public static void traditionCopy(File Copyfile, File newfile) throws Exce
  • java调用CMD完成文件复制

    千次阅读 2016-08-02 14:17:52
    java调用cmd完成文件复制
  • java使用BufferedInputStream和BufferedOutputStream实现文件复制 import java.io.*; public class IODemo { public static void main(String[] args) { String src = ""; //源文件路径 String dest = ""; //目.....
  • 我用Java写的复制文件功能,在windows下正常,在几个Linux机器上也正常,但有一个Linux机器上就复制不了,能有什么原因呢?我用cp命令行在这台机器上复制是可以的。 我刚开始学习Linux和Java,请大神们多多赐教啊...
  • Java跨服务器文件复制

    2020-09-30 10:36:28
    我有两个服务器,想在A服务器上运行程序,将B服务器上/web根目录下的a文件夹复制一份,期盼的结果是B服务器的/web目录下有a、b两个内容相同名称不同的文件夹,请问可以实现吗?应该怎么做
  • java实现excel表格文件复制,测试可用,将excel表格的表头和内容拷贝到新表中
  • java文件复制\删除

    千次阅读 2012-07-29 12:34:35
    java文件的一些基本操作,供大家借用,把代码全部复制就可使用运行 package com.file;   import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter...
  • java 快速复制文件,移动文件

    千次阅读 2018-08-07 23:34:12
    1、File 类的renameTo方法,只移动文件,移动后源目录没有文件 File file = new File(srcFilePath+srcFileName);  File targetFile =new File(realFile);    if(!targetFile.getParentFile().exists()) {  ...
  • java复制文件的4种方式

    千次阅读 2016-11-12 14:20:25
    然而有几种方法可以进行Java文件复制操作,下面列举出4中最受欢迎的方式。1. 使用FileStreams复制 这是最经典的方式将一个文件的内容复制到另一个文件中。 使用FileInputStream读取文件A的字节,使用FileOutputSt
  • Java多线程实现复制文件

    千次阅读 2018-09-24 15:55:33
    * 实现文件复制功能 * 多线程实现文件从一个目录复制到另一个目录 * @param sourceFile:给定源文件路径名 * @param desPath:复制点文件路径 * @return */ 代码实现如下: package com.tulun.thread; import ...
  • 版权声明:以下代码均由小任一人码成,转载请注明出处。 源码 import java.io.File; import java.io.FileInputStream;...//file读和写实现复制文件 public static void main(String[] args) throws E...
  • java复制文本文件

    千次阅读 2016-11-07 23:56:28
    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class InputAndOutputFile { public static v
  • Java 复制文件并改名

    千次阅读 2018-02-12 11:35:16
    //引入包import java.io.File;import java.io.FileInputStream;...//获取文件目录并复制文件String url1 = getFullFilePath(D:\\a.txt); //目标文件String url2 = getFullFilePath(E:\\b.txt); //要赋值的路径及...
  • java之通过FileChannel实现文件复制

    千次阅读 2018-06-10 22:22:59
    1、FileChanel介绍Java NIO FileChannel是连接文件的通道,从文件中读取数据和将数据写入文件Java NIO FileChannel类是NIO用于替代使用标准Java IO API读取文件的方法。FileInputStream的getChannel方法获取的文件...
  • 这是由于该java文件的编码和项目的编码不一致。 解决方法一:  1.在项目上右键properties,选择Resource,更改Text file encoding 设置(bgk或者utf-8 等...) 解决方法二:  1.使用notepad等编辑软件,把该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 601,034
精华内容 240,413
关键字:

文件的复制java

java 订阅