用不同的方法实现文件的复制

1. 通道

Channel,它是一个对象,可以通过它读取和写入数据。拿NIO与原来的I/O比较,通道就像是流。是对接操作系统底层和缓冲区的桥梁。

2. 性能比较

内存映射最快,其次是NIO读写文件,再其次是加了缓冲的IO流,最后是无缓冲的IO流

代码示例

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode; public class ChannelDemo { public static void main(String[] args) {
copyFile();
randomAccessFileCopy();
} /**
* 使用内存映射实现文件的复制
*/
private static void randomAccessFileCopy() {
try {
RandomAccessFile in = new RandomAccessFile("F:/test.txt", "r");
RandomAccessFile out = new RandomAccessFile("F:/testbak2.txt", "rw"); FileChannel fcIn = in.getChannel();
FileChannel fcOut = out.getChannel(); long size = fcIn.size();//输入流的字节大小 // 将输入流映射到缓冲区
MappedByteBuffer inBuf = fcIn.map(MapMode.READ_ONLY, 0, size);
MappedByteBuffer outBuf = fcOut.map(MapMode.READ_WRITE, 0, size); // 将输入流缓冲区的内容写到输出流缓冲区
for(int i = 0; i < size; i++) {
outBuf.put(inBuf.get());
} // 关闭(关闭通道时会写入)
fcIn.close();
fcOut.close();
in.close();
out.close();
System.out.println("复制成功");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}// randomAccessFileCopy /**
* 通过文件通道实现文件复制
*/
private static void copyFile() {
try {
// 创建一个输入文件通道
FileChannel fcIn = new FileInputStream("F:/test.txt").getChannel();
// 创建一个输出文件通道
FileChannel fcOut = new FileOutputStream("F:/testbak.txt").getChannel(); ByteBuffer buf = ByteBuffer.allocate(1024);
while(fcIn.read(buf) != -1) {
buf.flip();
fcOut.write(buf);
buf.clear();// 清空缓冲区
} fcOut.close();
fcIn.close();
System.out.println("复制成功");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}// copyFile }

Java 实现文件复制的不同方法的更多相关文章

  1. Java实现文件复制的四种方式

    背景:有很多的Java初学者对于文件复制的操作总是搞不懂,下面我将用4中方式实现指定文件的复制. 实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操 ...

  2. java中文件复制的4种方式

    今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数组很大,导致复制后目标文件非常大,其实就是空行等一 ...

  3. java多种文件复制方式以及效率比较

    1.背景 java复制文件的方式其实有很多种,可以分为 传统的字节流读写复制FileInputStream,FileOutputStream,BufferedInputStream,BufferedO ...

  4. java实现文件复制粘贴功能

    java编程思想中讲到了IO流的思想,以前对于java基础总是不够深入,浅尝辄止,如今碰到语句插桩的时候就感到书到用时方恨少啊! 文件的复制涉及到源文件和新文件(无需手动创建),给出源文件的路径和文件 ...

  5. Java字节流文件复制

    1.字节流 在 Java 中,文件的复制使用字节输入流和字节输出流实现,java.io 包有 InputStream 和 OutputStream 这两个顶层抽象类规范了读写文件所需的核心 API. ...

  6. 【java】文件复制的简单实现

    package 文件操作; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...

  7. java IO 文件复制代码模型

    package com.xjtu.demo; import java.io.*; public class FileCopy { public static void main(String[] ar ...

  8. Java实现文件复制

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * & ...

  9. Java处理 文件复制

    try { InputStream in = new FileInputStream(new File(oldPath)); OutputStream out = new FileOutputStre ...

随机推荐

  1. 【HDOJ6665】Calabash and Landlord(dfs)

    题意:二维平面上有两个框,问平面被分成了几个部分 x,y<=1e9 思路:分类讨论可以 但数据范围实在太小了,离散化以后随便dfs一下 #include<bits/stdc++.h> ...

  2. css 实现div内显示两行或三行,超出部分用省略号显示

    一.div内显示一行,超出部分用省略号显示 white-space: nowrap;    overflow: hidden;    text-overflow: ellipsis; 二.div内显示 ...

  3. LintCode之加一

    题目描述: 分析:由样例可以知道,当数组的每一个数字都是9时,加一会产生一个最高位的数字1,所以先判断这个数组的每一位是否都是9,如果是,那么新数组的大小是原数组大小加一,否则新数组的大小等于原数组的 ...

  4. Xpath表达式的粗介绍

    关于在自动化中Xpath表达式的书写,其实我也只是刚刚入门,粗略的跟着网上的教程学了一下,这篇我就来分享总结一下我学习到的知识. 首先呢,我们先认识一下什么是Xpath.Xpath是XML路径语言,它 ...

  5. linux + eclipse + cdt 报错undefined reference......好麻烦的,这位大牛给出的方法可行,特此MARK!!!!

    http://bbs.csdn.net/topics/390239632 kerosun kerosun 等级: 结帖率:96.92% 楼主 发表于: 2012-10-11 12:00:51   比如 ...

  6. 20190825 On Java8 第十二章 集合

    第十二章 集合 java.util 库提供了一套相当完整的集合类(collection classes)来解决这个问题,其中基本的类型有 List . Set . Queue 和 Map. 不要在新代 ...

  7. Zepto v1.0-1源码注解

    /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...

  8. kmp(前中后最长相同长度)

    http://acm.hdu.edu.cn/showproblem.php?pid=4763 Theme Section Time Limit: 2000/1000 MS (Java/Others)  ...

  9. HTML5+Canvas手机拍摄,本地压缩上传图片

    最近在折腾移动站的开发,涉及到了一个手机里面上传图片.于是经过N久的折腾,找到一个插件,用法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  10. C语言接口

    struct i_foo * foobar_foo(void); //返回接口指针struct foo_object * foo_create(struct i_foo *iface, void *d ...