通过JAVA NIO 通道传输拷贝文件
方式一
/**
* 通过JAVA NIO 通道传输拷贝文件
*
* @param sourcePath 源文件路径
* @param targetPath 目标文件路径
*/
public static void copyFileByChannelTransfer(String sourcePath, String targetPath) {
FileChannel inChannel = null;
FileChannel outChannel = null;
try {
//获取通道
inChannel = FileChannel.open(Paths.get(sourcePath), StandardOpenOption.READ);
outChannel = FileChannel.open(Paths.get(targetPath),StandardOpenOption.WRITE,StandardOpenOption.READ,StandardOpenOption.CREATE);
inChannel.transferTo(0,inChannel.size(),outChannel);
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭流
try {
if (outChannel != null) {
outChannel.close();
}
if (inChannel != null) {
inChannel.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}方式二
/**
* 通过JAVA NIO 通道传输拷贝文件
*
* @param sourcePath 源文件路径
* @param targetPath 目标文件路径
*/
public static void copyFileByChannelTransfer2(String sourcePath, String targetPath) {
FileInputStream fis = null;
FileOutputStream fos = null;
FileChannel inChannel = null;
FileChannel outChannel = null;
try {
fis = new FileInputStream(sourcePath);
fos = new FileOutputStream(targetPath);
//获取通道
inChannel = fis.getChannel();
outChannel = fos.getChannel();
inChannel.transferTo(0,inChannel.size(),outChannel);
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭流
try {
if (outChannel != null) {
outChannel.close();
}
if (inChannel != null) {
inChannel.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}使用示例
String source = "e:\demo\纵天神帝.txt";
String target = "e:\demo\";
long time1 = System.currentTimeMillis();
copyFileByStream(source, target + "1.txt");
System.out.println("通过字节流实现文件的拷贝耗时:" + (System.currentTimeMillis() - time1));
long time2 = System.currentTimeMillis();
copyFileByReaderAndWriter(source, target + "2.txt");
System.out.println("通过字符流实现文件的拷贝耗时:" + (System.currentTimeMillis() - time2));
long time3 = System.currentTimeMillis();
copyFileByBuffered(source, target + "3.txt");
System.out.println("通过字节缓冲流实现文件的拷贝耗时:" + (System.currentTimeMillis() - time3));
long time4 = System.currentTimeMillis();
copyFileByBufferedChar(source, target + "4.txt");
System.out.println("通过字符缓冲流实现文件的拷贝耗时:" + (System.currentTimeMillis() - time4));
long time5 = System.currentTimeMillis();
copyFileByChannel(source, target + "5.txt");
System.out.println("通过JAVA NIO通道(非直接缓冲区)实现文件的拷贝耗时:" + (System.currentTimeMillis() - time5));
long time6 = System.currentTimeMillis();
copyFileByChannelBufferd(source, target + "6.txt");
System.out.println("通过JAVA NIO通道(直接缓冲区)实现文件的拷贝耗时:" + (System.currentTimeMillis() - time6));
long time7 = System.currentTimeMillis();
copyFileByChannelTransfer(source, target + "7.txt");
System.out.println("通过JAVA NIO通道传输实现文件的拷贝耗时:" + (System.currentTimeMillis() - time7));
long time8 = System.currentTimeMillis();
copyFileByChannelTransfer(source, target + "8.txt");
System.out.println("通过JAVA NIO通道传输2实现文件的拷贝耗时:" + (System.currentTimeMillis() - time8));以上就是如何通过JAVA NIO通道传输拷贝文件的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号