当前访客身份:游客 [ 登录 | 加入开源中国 ]

代码分享

当前位置:
代码分享 » Java  » 编程基础
hyh122

java实现文件内容的复制

hyh122 发布于 2014年10月27日 11时, 10评/6963阅
分享到: 
收藏 +0
2
将一个文件的内容复制到另一个文件中
标签: <无>

代码片段(1) [全屏查看所有代码]

1. [代码][Java]代码     跳至 [1] [全屏预览]

package example;

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;

/**
 * 将一个文件的内容复制到另一个文件中 要采边读边写的模式,这样效率才会高
 * 
 * @author Administrator
 *
 */
public class Copy {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(args.length);
		/**
		 * 在args参数中传进两个文件的路径,可以在run as->run configuration的arguments设置args的参数
		 *
		 */
		if (args.length != 2) {
			System.out.println("输入的参数不正确!");
			System.exit(1);
		}
		File file1 = new File(args[0]);
		File file2 = new File(args[1]);

		if (!file1.exists()) {
			System.out.println("源文件不存在!");

		}
		InputStream fileInputStream = null;
		try {
			fileInputStream = new FileInputStream(file1);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		OutputStream fileOutputStream = null;
		try {
			fileOutputStream = new FileOutputStream(file2, true);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		if (fileInputStream != null && fileOutputStream != null) {
			int temp = 0;
			try {
				/**
				 * 边读边写
				 */
				while ((temp = fileInputStream.read()) != -1) {
					fileOutputStream.write(temp);
				}
				System.out.println("复制完成");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("复制失败");
			} finally {
				try {
					fileInputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}

	}

}


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(10)

  • 1楼:bosslovezz 发表于 2014-10-27 12:35 回复此评论
    关闭资源的时候难道不是遵循先开后关吗?
  • 2楼:o_o_0 发表于 2014-10-27 15:22 回复此评论
    FileChannel rc = new FileInputStream(new File("d:/t.txt")).getChannel();
    rc.transferTo(0, rc.size(), new FileOutputStream(new File("d:/t2.txt")).getChannel());
    rc.close();


  • 3楼:yushulx 发表于 2014-10-28 10:06 回复此评论
    再来个简单的: 
    OutputStream out = new FileOutputStream("copy.txt");
    Files.copy(new File("test.txt").toPath(), out); out.flush();
    out.close();
  • 4楼:宁致远 发表于 2014-10-29 12:47 回复此评论
    楼住 关闭最后一个时 是不是应该加一个 finally 呢,还有 为啥只复制一个字节呢 这样效率太慢了
    用缓冲区呗
  • 5楼:蔡心宇 发表于 2014-10-31 16:06 回复此评论

    引用来自“yushulx”的评论

    再来个简单的: 
    OutputStream out = new FileOutputStream("copy.txt");
    Files.copy(new File("test.txt").toPath(), out); out.flush();
    out.close();
    直接用两个都用Path做参数的版本更好,都省得用流了。流这东西简单是简单,但是效率实在差,要把数据操作从系统层引入虚拟机层,又强行串行化。纯Path版直接用系统提供的功能,充分发挥硬件实力。数据直接从系统层传送,而不是把数据拷贝到虚拟机中,能达到更高的效率。
  • 6楼:小翔 发表于 2014-10-31 17:47 回复此评论
    到处从用了FileUtil再没怎过这个了。。。。
  • 7楼:cyper 发表于 2014-11-01 17:46 回复此评论
    这种常用的工具用的apache的io包,代码如下:
    ```java
    File src = new File("src.txt");
    File dest = new File("dest.txt");
    FileUtils.copyFile(src, dest);

    ```
  • 8楼:leon709 发表于 2014-11-02 18:21 回复此评论
    竟然没有使用缓冲字节流,性能不行的,不过这个例子看不出来罢了
  • 9楼:Crazy_Coder 发表于 2014-11-03 22:26 回复此评论
    来个简单的,spring-core里的 
    FileCopyUtils.copy(new FileInputStream(new File("1.txt")), new FileOutputStream(new File("2.txt")));
  • 10楼:寂寞的村民 发表于 2016-06-20 08:46 回复此评论
    参考
    使用Java实现文件复制
    http://blog.jdk5.com/zh/copy-file-in-java/
开源从代码分享开始 分享代码
hyh122的其它代码 全部(2)...