移动文件分为两个步骤,先拷贝文件,再删除源文件。
下面的代码将会把 C:\rafaelnadal 目录中的内容移动到 C:\ATP\players\rafaelnafal 目录中。在移动前,要确保 C:\ATP\players\rafaelnafal 目录已经存在。在这个例子中,目录的移动使用了 Files.copy() 和 Files.delete() 方法,文件的移动使用了 Files.move() 方法。
import java.io.IOException;
import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
import java.util.EnumSet;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES;
import static java.nio.file.StandardCopyOption.ATOMIC_MOVE;
class MoveTree implements FileVisitor {
private final Path moveFrom;
private final Path moveTo;
static FileTime time = null;
public MoveTree(Path moveFrom, Path moveTo) {
this.moveFrom = moveFrom;
this.moveTo = moveTo;
}
static void moveSubTree(Path moveFrom, Path moveTo) throws IOException {
try {
Files.move(moveFrom, moveTo, REPLACE_EXISTING, ATOMIC_MOVE);
} catch (IOException e) {
System.err.println("Unable to move " + moveFrom + " [" + e + "]");
}
}
@Override
public FileVisitResult postVisitDirectory(Object dir, IOException exc)
throws IOException {
Path newdir = moveTo.resolve(moveFrom.relativize((Path) dir));
try {
Files.setLastModifiedTime(newdir, time);
Files.delete((Path) dir);
} catch (IOException e) {
System.err.println("Unable to copy all attributes to: " + newdir+" [" + e + "]");
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs)
throws IOException {
System.out.println("Move directory: " + (Path) dir);
Path newdir = moveTo.resolve(moveFrom.relativize((Path) dir));
try {
Files.copy((Path) dir, newdir, REPLACE_EXISTING, COPY_ATTRIBUTES);
time = Files.getLastModifiedTime((Path) dir);
} catch (IOException e) {
System.err.println("Unable to move " + newdir + " [" + e + "]");
return FileVisitResult.SKIP_SUBTREE;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Object file, BasicFileAttributes attrs)
throws IOException {
System.out.println("Move file: " + (Path) file);
moveSubTree((Path) file, moveTo.resolve(moveFrom.relativize((Path) file)));
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Object file, IOException exc)
throws IOException {
return FileVisitResult.CONTINUE;
}
}
class Main {
public static void main(String[] args) throws IOException {
Path moveFrom = Paths.get("C:/rafaelnadal");
Path moveTo = Paths.get("C:/ATP/players/rafaelnadal");
MoveTree walk = new MoveTree(moveFrom, moveTo);
EnumSet opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS);
Files.walkFileTree(moveFrom, opts, Integer.MAX_VALUE, walk);
}
}
当然,也可以不使用 Files.move() 方法,而使用 Files.copy()
和 Files.delete() 方法来移动文件:
static void moveSubTree(Path moveFrom, Path moveTo) throws IOException {
try {
Files.copy(moveFrom, moveTo, REPLACE_EXISTING, COPY_ATTRIBUTES);
Files.delete(moveFrom);
} catch (IOException e) {
System.err.println("Unable to move " + moveFrom + " [" + e + "]");
}
}
文章来源:
http://www.aptusource.org/2014/04/nio-2-writing-a-move-files-application/
分享到:
相关推荐
Java编程语言自1995年发布以来,一直保持着旺盛的生命力,广泛应用于企业级应用、移动应用(尤其是Android平台)以及互联网后端服务。"java精通+开发案例 经典经典总结"这个主题涵盖了Java学习的核心内容和实战经验...
**:编写第一个Java程序,了解基本的代码结构,包括类定义、主方法和输出语句。 3. **数据类型**:Java有两大类数据类型:基本类型(如int、char、boolean)和引用类型(如类、接口、数组)。 4. **变量**:理解变量...
Java编程语言自1995年发布以来,一直保持着旺盛的生命力,被广泛应用于桌面应用、Web应用、移动应用、企业级应用以及大数据处理等多个领域。这份“Java从入门到精通文档”旨在帮助初学者逐步掌握Java编程的核心概念...
Java课程设计是初学者入门编程世界的绝佳途径,它涵盖了编程基础、面向对象编程以及实际项目应用等多个方面。在这个过程中,你将学习到如何使用Java语言解决问题,并逐步掌握编程思维。 一、Java语言基础 Java是一...
3. 继承:一个类可以继承另一个类的特性,实现代码复用和扩展。 4. 多态:同一消息可以被不同类型的对象响应,提供了灵活性。 五、集合框架 Java集合框架包括List、Set、Queue和Map等接口,以及ArrayList、...
Java学习教程是一个全面而深入的资源,旨在帮助初学者和有经验的开发者系统地学习Java编程语言。这个教程共分为14个章节,涵盖了从基础语法到高级特性的方方面面,确保学习者能够逐步掌握Java的核心知识。 第一章:...
Java,作为一门广泛应用于企业级应用开发、移动应用以及大数据处理的语言,具有跨平台、面向对象、稳定性和高效性等特性。本教程将围绕"Java视频教程_黑马Java零基础辅导班[第一期]第1天课件源码"的主题,对Java的...
Java作为一种广泛应用的高级编程语言,是许多开发者的首选工具,尤其对于初学者来说,它的语法简洁且具有丰富的类库,能够帮助快速构建各种应用程序。"Java课程学习以及部分小程序资料"这个压缩包显然是为了帮助学习...
在IT领域,Java是一种广泛使用的编程语言,它的应用涵盖了从桌面应用、Web应用到移动应用和大型企业级系统。本教程旨在深入解析Java的核心概念和技术,帮助初学者和进阶者更好地理解和掌握这门强大的语言。 一、...
- 单例模式:确保一个类只有一个实例。 - 工厂模式:提供创建对象的接口。 - 适配器模式:使不兼容的接口能够协同工作。 - 责任链模式:传递请求直到被处理。 - 观察者模式:对象之间的一对多依赖关系。 37. *...
Java程序设计语言是软件设计师必备的核心技能之一,它以其跨平台、面向对象和高效能的...同时,Java的开源生态系统、丰富的第三方库以及持续更新的语言特性,使其在云计算、大数据、移动开发等多个领域都有广泛应用。