移动文件分为两个步骤,先拷贝文件,再删除源文件。
下面的代码将会把 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 I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...
New I/O (NIO), and NIO.2 categories. You learn what each category offers in terms of its capabilities, and you also learn about concepts such as paths and Direct Memory Access. Chapters 2 through 5 ...
这是一本介绍java io以及nio相关知识的书,书中对知识的讲解通俗易懂,是学习java nio以及复习java io相关知识的必备书籍。注意:本书为英文版!!!
java nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava ...
Java NIO.pdf Java NIO.pdf Java NIO.pdf Java NIO.pdf Java NIO.pdf Java NIO.pdf
Apress.Pro.Java.7.NIO.2.2011
java NIO.zip
蔚来-NIO.US-新车上市,蔚来可期.pdf
Pro Java 7 NIO.2 – PDF Books
This book covers all the important aspects involved in developing NIO.2-based applications. It provides clear instructions for getting the most out of NIO.2 and offers many exercises and case studies ...
Java NIO,Ron Hitchens 著,中文版 裴小星 译,Pro Java 7 NIO.2,Anghel Leonard 著,pdf文字版带书签,无安全限制
Pro Java 7 NIO.2.pdf,2011 by Anghel Leonard
在早期的 Java 版本中,文件 IO 操作功能一直相对较弱,主要存在以下问题: 缺乏对现代文件系统的支持:只提供的基础的文件操作,不支持很多现代的文件系统 API 不够直观:文件操作的 API 设计相对较为复杂和冗长,...
JavaNIO.pdf
下面小编就为大家分享一篇JDK1.7 之java.nio.file.Files 读取文件仅需一行代码实现,具有很好的参考价值,希望对大家有所帮助
找了好久,终于找到了,java刷新同步获取网络资源
This book covers all the important aspects involved in developing NIO.2-based applications. It provides clear instructions for getting the most out of NIO.2 and offers many exercises and case studies ...
用java.nio.*进行网络编程
定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 NIO API 的集中抽象为: 缓冲区,它们是数据容器; 字符集 及其相关解码器 和编码器, 它们在字节和 Unicode 字符之间进行转换; 各种类型的通道,...