Java 实现文件复制的不同方法
用不同的方法实现文件的复制
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 实现文件复制的不同方法的更多相关文章
- Java实现文件复制的四种方式
背景:有很多的Java初学者对于文件复制的操作总是搞不懂,下面我将用4中方式实现指定文件的复制. 实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操 ...
- java中文件复制的4种方式
今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数组很大,导致复制后目标文件非常大,其实就是空行等一 ...
- java多种文件复制方式以及效率比较
1.背景 java复制文件的方式其实有很多种,可以分为 传统的字节流读写复制FileInputStream,FileOutputStream,BufferedInputStream,BufferedO ...
- java实现文件复制粘贴功能
java编程思想中讲到了IO流的思想,以前对于java基础总是不够深入,浅尝辄止,如今碰到语句插桩的时候就感到书到用时方恨少啊! 文件的复制涉及到源文件和新文件(无需手动创建),给出源文件的路径和文件 ...
- Java字节流文件复制
1.字节流 在 Java 中,文件的复制使用字节输入流和字节输出流实现,java.io 包有 InputStream 和 OutputStream 这两个顶层抽象类规范了读写文件所需的核心 API. ...
- 【java】文件复制的简单实现
package 文件操作; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...
- java IO 文件复制代码模型
package com.xjtu.demo; import java.io.*; public class FileCopy { public static void main(String[] ar ...
- Java实现文件复制
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * & ...
- Java处理 文件复制
try { InputStream in = new FileInputStream(new File(oldPath)); OutputStream out = new FileOutputStre ...
随机推荐
- 生产环境下,oracle不同用户间的数据迁移。第二部分
任务名称:生产环境下schema ELON数据迁移至schema TIAN######################################## 测试二:测试参数remap_tablespa ...
- 牛客2019提高D1t1 最短路
分析 我们发现可以按照ai从小到大排序 边的大小就是当前的a减去前面第一个不等于它的a 代码 #include<iostream> #include<cstdio> #incl ...
- PowerShell 字符串操作--转载
格式化操作符 –F 在PowerShell文本操作符中非常重要,经常被用来增强数字类型和日期类型的可读性: "{0} diskettes per CD" -f (720mb/1.4 ...
- Unity shader with lightmap
小记一下用法与问题,时更 surface shader就不用操心了,自带lightmap计算 主要是vertex fragment shader部分 Unity5 bake light map有三种情 ...
- Linux下复杂PC问题——多进程编程/信号量通信/共享存储区
进程相关函数 pid_t fork(); 头文件:unistd.h,sys/types.h 作用:建立一个新进程(子进程),子进程与原进程(父进程)共享代码段,并拥有父进程的其他资源(数据.堆栈等)的 ...
- Hibernate入门1
Hibernate概述: 1. 什么是框架: 写程序,在使用框架之后,帮我们实现一部分的功能,使用框架的好处可以少写一部分代码实现功能 2. 什么是hibernate框架: hibernate框架应用 ...
- 洛谷P2330 [SCOI2005]繁忙的都市——kruskal
给一手链接 https://www.luogu.com.cn/problem/P2330 这道题实质就是最小生成树 TIPS:最小生成树不仅是整体权值最小,也是最大边最小 #include<cs ...
- 微信小程序(一)--微信小程序的介绍
一.微信小程序简介 小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用.也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题.应用将无 ...
- P3515 [POI2011]Lightning Conductor(决策单调性分治)
P3515 [POI2011]Lightning Conductor 式子可转化为:$p>=a_j-a_i+sqrt(i-j) (j<i)$ $j>i$的情况,把上式翻转即可得到 下 ...
- AJAX 获取Servlet文件路径
下面均不行: xmlRes.open("get","edu/hust/ajax/TestServlet",true); xmlRes.open("ge ...