文章目录
一、前言
该类只包含对文件,目录或其他类型文件进行操作的静态方法
二 、主要的API 使用说明
- exists()
检查给定的path 在文件系统中是否存在
Path path = Paths.get("D:\\data");
boolean pathExists = Files.exists(path,new LinkOption[]{LinkOption.NOFOLLOW_LINKS});
// 输出 false
System.out.println(pathExists);
- createDirectory()
创建一个新的目录
// 如果该目录已经存在,则是抛出一个java.nio.file.FileAlreadyExistsException
Path path1 = Paths.get("D://test");
try {
Files.createDirectory(path1);
} catch (IOException e) {
e.printStackTrace();
}
- createDirectories()
创建多级目录
Path path2 = Paths.get("D://test//java//log");
try {
//创建多级目录
Files.createDirectories(path2);
} catch (IOException e) {
e.printStackTrace();
}
- copy()
Files.copy()方法从一个路径拷贝一个文件到另外一个目录 或者重命名
Path path = Paths.get("D:\\test");
Path path1 = Paths.get("D:\\test\\java\\log.txt");
Path path2 = Paths.get("D:\\test\\java\\log\\logs.txt");
// StandardCopyOption.REPLACE_EXISTING 目标文件已经存在,这个参数指示copy()方法覆盖现有的文件
//Files.copy(path, path1, StandardCopyOption.REPLACE_EXISTING);
try {
Files.copy(path, path1);
} catch (IOException e) {
e.printStackTrace();
} finally {
}
- move()
Java NIO Files还包含一个函数,用于将文件从一个路径移动到另一个路径。移动文件与重命名相同,但是移动文件既可以移动到不同的目录,也可以在相同的操作中更改它的名称
Path sourcePath = Paths.get("data/logging-copy.properties");
Path destinationPath = Paths.get("data/subdir/logging-moved.properties");
try {
Files.move(sourcePath, destinationPath,
StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
//移动文件失败
e.printStackTrace();
}
- delete()
Files.delete()方法可以删除一个文件或者目录
Path path = Paths.get("data/subdir/logging-moved.properties");
try {
Files.delete(path);
} catch (IOException e) {
// 删除文件失败
e.printStackTrace();
}
- walkFileTree()
Files.walkFileTree()方法包含递归遍历目录树的功能。
walkFileTree()方法将Path实例和FileVisitor作为参数。
Path实例指向您想要遍历的目录。
FileVisitor在遍历期间被调用。
FileVisitor接口必须自己实现,并将实现的实例传递给walkFileTree()方法。
在目录遍历过程中,FileVisitor实现的每个方法都将被调用。
如果不需要实现所有这些方法,那么可以扩展SimpleFileVisitor类,它包含FileVisitor接口中所有方法的默认实现。
walkFileTree()的例子
//遍历文件或者目录
Path path = Paths.get("D:\\test\\java\\log\\logs.txt");
try {
Files.walkFileTree(path, new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println("pre visit dir:" + dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("visit file: " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
System.out.println("visit file failed: " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
System.out.println("post visit directory: " + dir);
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
这里是一个用于扩展SimpleFileVisitor的walkFileTree()
//===============================文件搜索===================
Path path = Paths.get("D:\\test\\java\\log\\logs.txt");
String fileToFind = "log.txt";
try {
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
String fileString = file.toAbsolutePath().toString();
System.out.println("pathString = " + fileString);
if(fileString.endsWith(fileToFind)){
System.out.println("file found at path: " + file.toAbsolutePath());
return FileVisitResult.CONTINUE;
}
return FileVisitResult.CONTINUE;
}
});
} catch(IOException e){
e.printStackTrace();
}*/
Files.walkFileTree()也可以用来删除包含所有文件和子目录的目录。Files.delete()方法只会删除一个目录,如果它是空的。通过遍历所有目录并删除每个目录中的所有文件(在visitFile())中,然后删除目录本身(在postVisitDirectory()中),您可以删除包含所有子目录和文件的目录。
//遍历删除文件
Path path = Paths.get("D:\\test\\java\\log\\logs.txt");
try {
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("delete file: " + file.toString());
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.delete(dir);
System.out.println("delete dir: " + dir.toString());
return FileVisitResult.CONTINUE;
}
});
} catch(IOException e){
e.printStackTrace();
}