`

java 实现文件复制的两种方式

    博客分类:
  • java
 
阅读更多
  文件复制首先我们要考虑的是用字符流还是文件流操作呢?
    若我们考虑的仅仅是文本之类的复制,字符流要好些。但是不可能总是文本文件吧,有可能是声音,图像,视频等等,所以使用字节流操作比较好。
    复制的两种方式
      1.将源文件中的内容全部读取到内存中,并一次性写入到目标文件
      2.不将源文件中的内容全部读取到内存中来,而是采取边读边写的方式
下面就是采用这两种方法对比
 package zzs.file.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileCopy {
	private File inputFile;
	private File outputFile;
	private InputStream inputStream;
	private OutputStream outputStream;
	public FileCopy(String inputPath,String outputPath) throws FileNotFoundException{
		inputFile=new File(inputPath);
		outputFile=new File(outputPath);
		inputStream=new FileInputStream(inputFile);
		outputStream=new FileOutputStream(outputFile);
		
	}
	//一次性把数据全部读取到内存中来,再一次性写入
	public void copy1() throws IOException{
		byte b[]=new byte[(int)inputFile.length()];
		inputStream.read(b);       //一次性读入
		outputStream.write(b);   //一次性写入
//		inputStream.close();
//		outputStream.close();
	}
	//边读边写
	public void copy2() throws IOException{
		int temp=0;
		while((temp=inputStream.read())!=-1){
			outputStream.write(temp);
		}
		inputStream.close();
		outputStream.close();
	}
	
	public File getInputFile() {
		return inputFile;
	}
	public void setInputFile(File inputFile) {
		this.inputFile = inputFile;
	}
	public File getOutputFile() {
		return outputFile;
	}
	public void setOutputFile(File outputFile) {
		this.outputFile = outputFile;
	}
	public static void main(String[] args) throws IOException{
		String inputPath="e:"+File.separator+"Xfire.rar";
		String outputPath="f:"+File.separator+inputPath.substring(inputPath.indexOf(File.separator));
		FileCopy fileCopy=new FileCopy(inputPath, outputPath);
		long start1=System.currentTimeMillis();
		fileCopy.copy1();
		long end1=System.currentTimeMillis();
		System.out.println("一次性全部读入内存复制文件大小为"+fileCopy.getInputFile().length()+"位花费时间为:"+(end1-start1)+"ms");
		
		
		fileCopy.getOutputFile().delete();
		long start2=System.currentTimeMillis();
		fileCopy.copy2();
		long end2=System.currentTimeMillis();
		System.out.println("边读边写复制文件大小为"+fileCopy.getInputFile().length()+"位花费时间为:"+(end2-start2)+"ms");
	}

}

   经测试发现,对于读取文件的大小小于自身机器的内存时,采取方式1要比方式二快很多,但是若读取的文件大于自身内存则方式二好些。不过在这种情况下有更好的方式就是采取缓冲机制,读取一块,写入一块。结合了一和二的优点。
0
4
分享到:
评论

相关推荐

    java复制文件的4种方式

    本文将详细介绍四种常见的Java文件复制方法:使用`FileStreams`、使用`FileChannel`、使用Apache `Commons IO`以及使用Java 7的`Files`类。 #### 1. 使用`FileStreams`复制文件 这种方法是最传统的文件复制手段,...

    java实现文件的复制

    综上所述,Java中的文件复制可以通过多种方式进行,Stream API提供了一种更现代、更高效的解决方案,特别是在Java 8及更高版本中。在实际编程中,开发者应根据项目需求和性能要求灵活选择合适的方法。

    利用Java实现复制Excel工作表功能

    今天,我们将介绍如何使用Java实现复制Excel工作表功能,包括在同一个工作簿内复制工作表和在不同工作簿间复制工作表两种情况。 复制工作表 在实际应用中,我们经常需要复制工作表以便更好地组织和管理数据。使用...

    java 使用IO流实现文件的复制

    总的来说,Java通过IO流提供了多种文件复制的方法,开发者可以根据实际需求选择合适的方式。无论是基础的字节流还是高效的NIO,它们都是Java处理文件操作的重要工具。在实际开发中,理解并掌握这些技术,对于提升...

    高效率文件复制java版

    本资源主要讲解了高效率文件复制的java实现方法,包含了两种不同的实现方式,分别使用java io流和FileChannel来实现文件复制操作。 知识点1:Java IO流文件复制 在第一个实现方法中,我们使用了Java IO流来实现...

    java实现,简单文件监控

    总的来说,Java的`WatchService`为开发者提供了一种有效的方式去监控文件系统的动态,而剪贴板的监听则需要借助额外的库或系统API。通过合理的编程和事件处理,我们可以构建出一个能够满足特定需求的文件监控系统。

    用java实现文件拷贝

    在这个小程序中,我们使用了Java文件操作的相关知识点,包括: * `File`类:用来创建文件对象。 * `FileInputStream`和`FileOutputStream`类:用来打开文件流。 * `read()`和`write()`方法:用来读取和写入文件的...

    Java实现Linux的远程拷贝

    在IT行业中,Java是一种广泛应用的编程语言,它不仅在企业级应用中表现出色,也能够实现各种系统级别的功能,如远程文件操作。本篇将详细探讨如何使用Java来实现Linux系统的远程拷贝功能。 首先,要实现Linux的远程...

    java文件复制器代码

    Java 文件复制器是一种实用程序,用于在计算机上复制文件。在这个特定的代码示例中,我们看到一个名为 `FileCopy` 的类,该类包含了复制文件的核心逻辑。下面我们将详细探讨这个程序的关键部分以及实现文件复制所...

    java 解析 tar gz文件 两种方法

    这里我们将详细探讨两种不同的方法来实现这个过程。 方法一:使用Apache Commons Compress库 Apache Commons Compress库是Java社区广泛使用的处理各种压缩格式的库,包括tar.gz。要使用这个库,首先需要将它的jar...

    java的IO流实现文件复制20190726.zip

    在这个案例中,我们讨论的主题是如何利用Java的IO流实现文件复制,特别是使用字节流进行操作。字节流是Java IO流的一种类型,它可以处理任何类型的原始数据,因为所有数据在计算机内部最终都会被转化为字节序列。 ...

    java 文本文件 支持新建,打开,复制,剪切...

    Java的NIO(非阻塞I/O)提供了一种更高效的方式来处理文件操作,特别是当处理大量文件或大文件时。`java.nio`包提供了一组新的类,如`FileChannel`,`ByteBuffer`等,它们可以在不阻塞主线程的情况下进行I/O操作。 ...

    IO流三种流方式的文本文件的复制

    下面我们将详细探讨这些流在文本文件复制中的应用。 首先,字节流是Java中最基础的流类型,分为InputStream和OutputStream两个类,它们分别用于处理数据的输入和输出。InputStream用于读取原始的字节数据,而...

    java实现文件合并与分割

    在Java编程语言中,文件合并与分割是常见的文件操作任务,尤其在大数据处理、日志分析和文件管理等场景中尤为关键。本程序提供了一个基础的实现,旨在帮助初学者理解这一过程,并通过MD5校验确保文件的完整性和未被...

    java文件复制

    综上所述,这个"java文件复制"项目涵盖了Java I/O流的使用、GUI设计、异常处理等多个核心知识点,为用户提供了一种实用的文件复制解决方案。通过学习和实践,开发者可以深入理解Java文件操作和GUI编程。

    java实现poi模板生成PPT文件代码

    Java中的Apache POI库是一个强大的工具,用于读取、创建和...在给定的代码中,可能有两个不同的迭代实现,分别对应两种不同的处理方式或优化策略。通过深入学习和实践,可以灵活地根据需求生成定制化的PPT报告或展示。

    java copytest(复制)

    以下是一个基础的文件复制方法的示例: ```java import java.io.*; public class CopyTest { public static void copyFile(String sourcePath, String destPath) { try (FileInputStream fis = new ...

    java实现文件拷贝的七种方式

    * 字节流和字符流是 Java 中两种基本的输入/输出流,分别用于读取和写入二进制数据和字符数据。 * 使用字节流可以实现文件的快速拷贝,适合大型文件的拷贝。 * 使用字符流只能拷贝文本文件,适合小型文本文件的拷贝...

    以文件流的方式复制文件

    Java中有多种方法可以实现文件复制,包括使用文件流、BufferedReader和BufferedWriter等方式。在本例中,我们使用文件流的方式来复制文件。 三、使用文件流复制文件的步骤 1. 创建文件输入流对象,用于读取源文件...

    java实现文件复制上传操作

    首先,我们来看如何在Java中实现文件复制。通常,我们可以使用`java.io`包中的`FileInputStream`和`FileOutputStream`类来读取和写入文件。以下是一个名为`CopyFileUtil`的工具类,它包含两个方法:`copyFile`和`...

Global site tag (gtag.js) - Google Analytics