控制台程序,除了使用Files类中使用copy()方法将文件复制外,还可以使用FileChannel对象复制文件,连接到输入文件的FileChannel对象能直接将数据传输到连接到输出文件的FileChannel对象中而不涉及显式的缓冲区。

本例用来对命令行参数设定的文件进行复制。文件被复制到一个类似在原始目录下创建的备份文件中。新文件的名称通过在原始文件名称的后面附加多次“_backup”以获得唯一文件名。

 import static java.nio.file.StandardOpenOption.*;
import java.nio.file.*;
import java.nio.channels.*;
import java.io.IOException;
import java.util.EnumSet; public class FileBackup {
public static void main(String[] args) {
if(args.length==0) {
System.out.println("No file to copy. Application usage is:\n" + "java -classpath . FileCopy \"filepath\"" );
System.exit(1);
}
Path fromFile = Paths.get(args[0]);
fromFile.toAbsolutePath(); if(Files.notExists(fromFile)) {
System.out.printf("File to copy, %s, does not exist.", fromFile);
System.exit(1);
} Path toFile = createBackupFilePath(fromFile);
try (FileChannel inCh = (FileChannel)(Files.newByteChannel(fromFile));
WritableByteChannel outCh = Files.newByteChannel( toFile, EnumSet.of(WRITE,CREATE_NEW))){
int bytesWritten = 0;
long byteCount = inCh.size();
while(bytesWritten < byteCount) {
bytesWritten += inCh.transferTo(bytesWritten, byteCount-bytesWritten, outCh);
} System.out.printf("File copy complete. %d bytes copied to %s%n", byteCount, toFile);
} catch(IOException e) {
e.printStackTrace();
}
} // Method to create a unique backup Path object under MS Windows
public static Path createBackupFilePath(Path file) {
Path parent = file.getParent();
String name = file.getFileName().toString(); // Get the file name
int period = name.indexOf('.'); // Find the extension separator
if(period == -1) { // If there isn't one
period = name.length(); // set it to the end of the string
}
String nameAdd = "_backup"; // String to be appended // Create a Path object that is a unique
Path backup = parent.resolve(
name.substring(0,period) + nameAdd + name.substring(period));
while(Files.exists(backup)) { // If the path already exists...
name = backup.getFileName().toString(); // Get the current file name
backup = parent.resolve(name.substring(0,period) + // add _backup
nameAdd + name.substring(period));
period += nameAdd.length(); // Increment separator index
}
return backup;
}
}

最新文章

  1. python IDE
  2. 用cart(分类回归树)作为弱分类器实现adaboost
  3. hdoj 1176(可转化为数塔)
  4. OpenWrt compiles
  5. eclipse项目提交到git
  6. ADT Example
  7. 深度优先搜索——迷宫问题(华为oj)
  8. POJ 3356 AGTC(最长公共子)
  9. rabbitmq在mac上安装
  10. Nginx的知识分享,继续上次的分享
  11. 我的2017OKR - 年中回顾
  12. [LOJ10121] 与众不同
  13. centos7修改网卡名称为eth0
  14. Spring XML配置里的Bean自动装配
  15. G - 生日蛋糕
  16. Axis2之异步调用
  17. 使用python进行短信轰炸
  18. CentOS针对磁盘IO[jdb2进程]的优化
  19. 2015 icpc北京赛区 D 最小割
  20. hive执行流程分析

热门文章

  1. linux 防火墙设置
  2. UIButton 长按点击 背景改变效果
  3. 常用Ubuntu 命令
  4. 20145317彭垚《Java程序设计》实验二
  5. Apache服务器安装配置
  6. nginx高并发优化
  7. Centos tar命令
  8. 2014总结&amp;2015计划
  9. centos apache安装和设置
  10. 分布式中,zookeeper的部署