Path
public interface Path extends Comparable<Path>, Iterable<Path>, Watchable
可用于在文件系统中定位文件的对象。 它通常表示系统相关的文件路径。
Path
表示一个分层的路径,由一个特殊分隔符或分隔符分隔的目录和文件名元素序列组成。 也可以存在标识文件系统层次结构的根组件 。 距离目录层次结构根目录最远的名称元素是文件或目录的名称。 其他名称元素是目录名称。 A Path
可以表示根,根和序列的名称,或简单的一个或多个名称元素。 如果Path
仅由一个空的名称元素组成,则认为是空的路径 。 使用空路径访问文件等同于访问文件系统的默认目录。 Path
定义getFileName
, getParent
, getRoot
和subpath
方法来访问路径部件或它的名称元素的子序列。
除了访问路径的组件之外, Path
还定义了组合路径的resolve
和resolveSibling
方法。 可以用于构建两个路径之间的相对路径的relativize
方法。 路径可以是compared
,并使用startsWith
和endsWith
方法相互测试。
此接口扩展了Watchable
接口,使得路径位于的目录可以是registered
,带有一个WatchService
和目录中的条目。
注意:此接口仅用于开发自定义文件系统实现的那些实现。 方法可能会在以后的版本添加到此界面。
访问文件
路径可以与Files
类一起使用,以对文件,目录和其他类型的文件进行操作。 例如,假设我们想要一个BufferedReader
从文件“ access.log
”中读取文本。 该文件位于相对于当前工作目录的目录“ logs
”中,并且是UTF-8编码的。
Path path = FileSystems.getDefault().getPath("logs", "access.log");
BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
互操作性
与默认provider
相关联的路径通常可以与java.io.File
类进行互操作。 由其他提供商创建的路径不可能与由java.io.File表示的抽象路径名称互java.io.File
。 该toPath
方法可以被用于获得Path
从由A表示的抽象路径名java.io.File
对象。 所产生的Path
可以用于与java.io.File
对象相同的文件操作。 此外, toFile
方法是有用的构建File
从String
一个的表示Path
。
并发性
该接口的实现是不可变且安全的,可供多个并行线程使用。
方法
类型和参数 | 方法和描述 |
---|---|
int | compareTo(Path other) 比较两个抽象的路径词典。 |
boolean | endsWith(Path other) 测试此路径是否以给定的路径结束。 |
boolean | endsWith(String other) 测试此路径是否以 |
boolean | equals(Object other) 测试此路径与给定对象的相等性。 |
Path | getFileName() 将此路径表示的文件或目录的名称返回为 |
FileSystem | getFileSystem() 返回创建此对象的文件系统。 |
Path | getName(int index) 返回此路径的名称元素作为 |
int | getNameCount() 返回路径中的名称元素的数量。 |
Path | getParent() 返回 父路径 ,或 |
Path | getRoot() 返回此路径的根组分作为 |
int | hashCode() 计算此路径的哈希码。 |
boolean | isAbsolute() 告诉这条路是否是绝对的。 |
Iterator<Path> | iterator() 返回此路径的名称元素的迭代器。 |
Path | normalize() 返回一个路径,该路径是冗余名称元素的消除。 |
WatchKey | register(WatchService watcher, WatchEvent.Kind<?>... events) 使用手表服务注册此路径所在的文件。 |
WatchKey | register(WatchService watcher, WatchEvent.Kind<?>[] events, WatchEvent.Modifier... modifiers) 使用手表服务注册此路径所在的文件。 |
Path | relativize(Path other) 构造此路径和给定路径之间的相对路径。 |
Path | resolve(Path other) 根据这条路径解决给定的路径。 |
Path | resolve(String other) 一个给定的路径字符串转换为 |
Path | resolveSibling(Path other) 根据此路径的 |
Path | resolveSibling(String other) 将给定的路径字符串转换为 |
boolean | startsWith(Path other) 测试此路径是否以给定的路径开始。 |
boolean | startsWith(String other) 测试此路径是否以 |
Path | subpath(int beginIndex, int endIndex) 返回一个相对的 |
Path | toAbsolutePath() 返回表示此路径的绝对路径的 |
File | toFile() 返回表示此路径的 |
Path | toRealPath(LinkOption... options) 返回现有文件的 真实路径。 |
String | toString() 返回此路径的字符串表示形式。 |
URI | toUri() 返回一个URI来表示此路径。 |
Paths
public final class Paths extends Object
此类仅由静态方法组成,通过转换路径字符串返回Path
或URI
。
方法
类型和参数 | 方法和描述 |
---|---|
static Path | get(String first, String... more) 将路径字符串或连接到路径字符串的字符串序列转换为 |
static Path | get(URI uri) 将给定的URI转换为 |
Files
public final class Files extends Object
该类只包含对文件,目录或其他类型文件进行操作的静态方法。
在大多数情况下,这里定义的方法将委托给相关的文件系统提供程序来执行文件操作。
方法
类型和参数 | 方法和描述 |
---|---|
static long | copy(InputStream in, Path target, CopyOption... options) 将输入流中的所有字节复制到文件。 |
static long | copy(Path source, OutputStream out) 将文件中的所有字节复制到输出流。 |
static Path | copy(Path source, Path target, CopyOption... options) 将文件复制到目标文件。 |
static Path | createDirectories(Path dir, FileAttribute<?>... attrs) 首先创建所有不存在的父目录来创建目录。 |
static Path | createDirectory(Path dir, FileAttribute<?>... attrs) 创建一个新的目录。 |
static Path | createFile(Path path, FileAttribute<?>... attrs) 创建一个新的和空的文件,如果该文件已存在失败。 |
static Path | createLink(Path link, Path existing) 为现有文件创建新的链接(目录条目) (可选操作) 。 |
static Path | createSymbolicLink(Path link, Path target, FileAttribute<?>... attrs) 创建到目标的符号链接 (可选操作) 。 |
static Path | createTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs) 在指定的目录中创建一个新目录,使用给定的前缀生成其名称。 |
static Path | createTempDirectory(String prefix, FileAttribute<?>... attrs) 在默认临时文件目录中创建一个新目录,使用给定的前缀生成其名称。 |
static Path | createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs) 在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 |
static Path | createTempFile(String prefix, String suffix, FileAttribute<?>... attrs) 在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。 |
static void | delete(Path path) 删除文件。 |
static boolean | deleteIfExists(Path path) 删除文件(如果存在)。 |
static boolean | exists(Path path, LinkOption... options) 测试文件是否存在。 |
static Stream<Path> | find(Path start, int maxDepth, BiPredicate<Path,BasicFileAttributes> matcher, FileVisitOption... options) 返回一个 |
static Object | getAttribute(Path path, String attribute, LinkOption... options) 读取文件属性的值。 |
static <V extends FileAttributeView> | getFileAttributeView(Path path, 类<V> type, LinkOption... options) 返回给定类型的文件属性视图。 |
static FileStore | getFileStore(Path path) 返回表示文件所在文件存储区的 |
static FileTime | getLastModifiedTime(Path path, LinkOption... options) 返回文件的上次修改时间。 |
static UserPrincipal | getOwner(Path path, LinkOption... options) 返回文件的所有者。 |
static Set<PosixFilePermission> | getPosixFilePermissions(Path path, LinkOption... options) 返回文件的POSIX文件权限。 |
static boolean | isDirectory(Path path, LinkOption... options) 测试文件是否是目录。 |
static boolean | isExecutable(Path path) 测试文件是否可执行。 |
static boolean | isHidden(Path path) 告知文件是否被 隐藏 。 |
static boolean | isReadable(Path path) 测试文件是否可读。 |
static boolean | isRegularFile(Path path, LinkOption... options) 测试文件是否是具有不透明内容的常规文件。 |
static boolean | isSameFile(Path path, Path path2) 测试两个路径是否找到相同的文件。 |
static boolean | isSymbolicLink(Path path) 测试文件是否是符号链接。 |
static boolean | isWritable(Path path) 测试文件是否可写。 |
static Stream<String> | lines(Path path) 从 |
static Stream<String> | lines(Path path, Charset cs) 从文件中读取所有行作为 |
static Stream<Path> | list(Path dir) 返回一个懒惰的填充 |
static Path | move(Path source, Path target, CopyOption... options) 将文件移动或重命名为目标文件。 |
static BufferedReader | newBufferedReader(Path path) 打开一个文件进行阅读,返回一个 |
static BufferedReader | newBufferedReader(Path path, Charset cs) 打开一个文件进行阅读,返回一个 |
static BufferedWriter | newBufferedWriter(Path path, Charset cs, OpenOption... options) 打开或创建一个写入文件,返回一个 |
static BufferedWriter | newBufferedWriter(Path path, OpenOption... options) 打开或创建一个写入文件,返回一个 |
static SeekableByteChannel | newByteChannel(Path path, OpenOption... options) 打开或创建文件,返回可访问的字节通道以访问该文件。 |
static SeekableByteChannel | newByteChannel(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) 打开或创建文件,返回可访问的字节通道以访问该文件。 |
static DirectoryStream<Path> | newDirectoryStream(Path dir) 打开一个目录,返回一个 |
static DirectoryStream<Path> | newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) 打开一个目录,返回一个 |
static DirectoryStream<Path> | newDirectoryStream(Path dir, String glob) 打开一个目录,返回一个 |
static InputStream | newInputStream(Path path, OpenOption... options) 打开一个文件,返回输入流以从文件中读取。 |
static OutputStream | newOutputStream(Path path, OpenOption... options) 打开或创建文件,返回可用于向文件写入字节的输出流。 |
static boolean | notExists(Path path, LinkOption... options) 测试此路径所在的文件是否不存在。 |
static String | probeContentType(Path path) 探测文件的内容类型。 |
static byte[] | readAllBytes(Path path) 读取文件中的所有字节。 |
static List<String> | readAllLines(Path path) 从文件中读取所有行。 |
static List<String> | readAllLines(Path path, Charset cs) 从文件中读取所有行。 |
static <A extends BasicFileAttributes> | readAttributes(Path path, 类<A> type, LinkOption... options) 读取文件的属性作为批量操作。 |
static Map<String,Object> | readAttributes(Path path, String attributes, LinkOption... options) 读取一组文件属性作为批量操作。 |
static Path | readSymbolicLink(Path link) 读取符号链接的目标 (可选操作) 。 |
static Path | setAttribute(Path path, String attribute, Object value, LinkOption... options) 设置文件属性的值。 |
static Path | setLastModifiedTime(Path path, FileTime time) 更新文件上次修改的时间属性。 |
static Path | setOwner(Path path, UserPrincipal owner) 更新文件所有者。 |
static Path | setPosixFilePermissions(Path path, Set<PosixFilePermission> perms) 设置文件的POSIX权限。 |
static long | size(Path path) 返回文件的大小(以字节为单位)。 |
static Stream<Path> | walk(Path start, FileVisitOption... options) 返回一个 |
static Stream<Path> | walk(Path start, int maxDepth, FileVisitOption... options) 返回一个 |
static Path | walkFileTree(Path start, FileVisitor<? super Path> visitor) 走一个文件树。 |
static Path | walkFileTree(Path start, Set<FileVisitOption> options, int maxDepth, FileVisitor<? super Path> visitor) 走一个文件树。 |
static Path | write(Path path, byte[] bytes, OpenOption... options) 将字节写入文件。 |
static Path | write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options) 将文本行写入文件。 |
static Path | write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options) 将文本行写入文件。 |
例如
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.SeekableByteChannel;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
import java.util.Iterator;
import org.junit.Test;
public class FilesTest {
@Test
public void test1() throws IOException{
Path path1 = Paths.get("d:\\nio", "hello.txt");
Path path2 = Paths.get("atguigu.txt");
// Path copy(Path src, Path dest, CopyOption … how) : 文件的复制
//要想复制成功,要求path1对应的物理上的文件存在。path1对应的文件没有要求。
// Files.copy(path1, path2, StandardCopyOption.REPLACE_EXISTING);
// Path createDirectory(Path path, FileAttribute<?> … attr) : 创建一个目录
//要想执行成功,要求path对应的物理上的文件目录不存在。一旦存在,抛出异常。
Path path3 = Paths.get("d:\\nio\\nio1");
// Files.createDirectory(path3);
// Path createFile(Path path, FileAttribute<?> … arr) : 创建一个文件
//要想执行成功,要求path对应的物理上的文件不存在。一旦存在,抛出异常。
Path path4 = Paths.get("d:\\nio\\hi.txt");
// Files.createFile(path4);
// void delete(Path path) : 删除一个文件/目录,如果不存在,执行报错
// Files.delete(path4);
// void deleteIfExists(Path path) : Path对应的文件/目录如果存在,执行删除.如果不存在,正常执行结束
Files.deleteIfExists(path3);
// Path move(Path src, Path dest, CopyOption…how) : 将 src 移动到 dest 位置
//要想执行成功,src对应的物理上的文件需要存在,dest对应的文件没有要求。
// Files.move(path1, path2, StandardCopyOption.ATOMIC_MOVE);
// long size(Path path) : 返回 path 指定文件的大小
long size = Files.size(path2);
System.out.println(size);
}
@Test
public void test2() throws IOException{
Path path1 = Paths.get("d:\\nio", "hello.txt");
Path path2 = Paths.get("atguigu.txt");
// boolean exists(Path path, LinkOption … opts) : 判断文件是否存在
System.out.println(Files.exists(path2, LinkOption.NOFOLLOW_LINKS));
// boolean isDirectory(Path path, LinkOption … opts) : 判断是否是目录
//不要求此path对应的物理文件存在。
System.out.println(Files.isDirectory(path1, LinkOption.NOFOLLOW_LINKS));
// boolean isRegularFile(Path path, LinkOption … opts) : 判断是否是文件
// boolean isHidden(Path path) : 判断是否是隐藏文件
//要求此path对应的物理上的文件需要存在。才可判断是否隐藏。否则,抛异常。
// System.out.println(Files.isHidden(path1));
// boolean isReadable(Path path) : 判断文件是否可读
System.out.println(Files.isReadable(path1));
// boolean isWritable(Path path) : 判断文件是否可写
System.out.println(Files.isWritable(path1));
// boolean notExists(Path path, LinkOption … opts) : 判断文件是否不存在
System.out.println(Files.notExists(path1, LinkOption.NOFOLLOW_LINKS));
}
/**
* StandardOpenOption.READ:表示对应的Channel是可读的。
* StandardOpenOption.WRITE:表示对应的Channel是可写的。
* StandardOpenOption.CREATE:如果要写出的文件不存在,则创建。如果存在,忽略
* StandardOpenOption.CREATE_NEW:如果要写出的文件不存在,则创建。如果存在,抛异常
*/
@Test
public void test3() throws IOException{
Path path1 = Paths.get("d:\\nio", "hello.txt");
// InputStream newInputStream(Path path, OpenOption…how):获取 InputStream 对象
InputStream inputStream = Files.newInputStream(path1, StandardOpenOption.READ);
// OutputStream newOutputStream(Path path, OpenOption…how) : 获取 OutputStream 对象
OutputStream outputStream = Files.newOutputStream(path1, StandardOpenOption.WRITE,StandardOpenOption.CREATE);
// SeekableByteChannel newByteChannel(Path path, OpenOption…how) : 获取与指定文件的连接,how 指定打开方式。
SeekableByteChannel channel = Files.newByteChannel(path1, StandardOpenOption.READ,StandardOpenOption.WRITE,StandardOpenOption.CREATE);
// DirectoryStream<Path> newDirectoryStream(Path path) : 打开 path 指定的目录
Path path2 = Paths.get("e:\\teach");
DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path2);
Iterator<Path> iterator = directoryStream.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}