Java —— Path、Paths、Files

Path

public interface Path
extends Comparable<Path>, Iterable<Path>, Watchable

可用于在文件系统中定位文件的对象。 它通常表示系统相关的文件路径。

Path表示一个分层的路径,由一个特殊分隔符或分隔符分隔的目录和文件名元素序列组成。 也可以存在标识文件系统层次结构的根组件 。 距离目录层次结构根目录最远的名称元素是文件或目录的名称。 其他名称元素是目录名称。 A Path可以表示根,根和序列的名称,或简单的一个或多个名称元素。 如果Path仅由一个空的名称元素组成,则认为是空的路径 。 使用空路径访问文件等同于访问文件系统的默认目录。 Path定义getFileNamegetParentgetRootsubpath方法来访问路径部件或它的名称元素的子序列。

除了访问路径的组件之外, Path还定义了组合路径的resolveresolveSibling方法。 可以用于构建两个路径之间的相对路径的relativize方法。 路径可以是compared ,并使用startsWithendsWith方法相互测试。

此接口扩展了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方法是有用的构建FileString一个的表示Path

并发性

该接口的实现是不可变且安全的,可供多个并行线程使用。

方法

类型和参数方法和描述
intcompareTo(Path other)

比较两个抽象的路径词典。

booleanendsWith(Path other)

测试此路径是否以给定的路径结束。

booleanendsWith(String other)

测试此路径是否以 Path结束,通过转换给定的路径字符串,完全按照 endsWith(Path)方法指定的方式构建。

booleanequals(Object other)

测试此路径与给定对象的相等性。

PathgetFileName()

将此路径表示的文件或目录的名称返回为 Path对象。

FileSystemgetFileSystem()

返回创建此对象的文件系统。

PathgetName(int index)

返回此路径的名称元素作为 Path对象。

intgetNameCount()

返回路径中的名称元素的数量。

PathgetParent()

返回 父路径 ,或 null如果此路径没有父。

PathgetRoot()

返回此路径的根组分作为 Path对象,或 null如果该路径不具有根组件。

inthashCode()

计算此路径的哈希码。

booleanisAbsolute()

告诉这条路是否是绝对的。

Iterator<Path>iterator()

返回此路径的名称元素的迭代器。

Pathnormalize()

返回一个路径,该路径是冗余名称元素的消除。

WatchKeyregister(WatchService watcher, WatchEvent.Kind<?>... events)

使用手表服务注册此路径所在的文件。

WatchKeyregister(WatchService watcher, WatchEvent.Kind<?>[] events, WatchEvent.Modifier... modifiers)

使用手表服务注册此路径所在的文件。

Pathrelativize(Path other)

构造此路径和给定路径之间的相对路径。

Pathresolve(Path other)

根据这条路径解决给定的路径。

Pathresolve(String other)

一个给定的路径字符串转换为 Path并解析它针对此 Path在完全按规定的方式 resolve方法。

PathresolveSibling(Path other)

根据此路径的 parent路径解决给定的路径。

PathresolveSibling(String other)

将给定的路径字符串转换为 Path ,并按照 resolveSibling方法指定的方式将其解析为该路径的 parent路径。

booleanstartsWith(Path other)

测试此路径是否以给定的路径开始。

booleanstartsWith(String other)

测试此路径是否以 Path ,通过转换给定的路径字符串,按照 startsWith(Path)方法指定的方式构建。

Pathsubpath(int beginIndex, int endIndex)

返回一个相对的 Path ,它是该路径的名称元素的子序列。

PathtoAbsolutePath()

返回表示此路径的绝对路径的 Path对象。

FiletoFile()

返回表示此路径的File对象。

PathtoRealPath(LinkOption... options)

返回现有文件的 真实路径。

StringtoString()

返回此路径的字符串表示形式。

URItoUri()

返回一个URI来表示此路径。

Paths

public final class Paths
extends Object

此类仅由静态方法组成,通过转换路径字符串返回PathURI

方法

 

类型和参数方法和描述
static Pathget(String first, String... more)

将路径字符串或连接到路径字符串的字符串序列转换为 Path

static Pathget(URI uri)

将给定的URI转换为Path对象。

Files

public final class Files
extends Object

该类只包含对文件,目录或其他类型文件进行操作的静态方法。

在大多数情况下,这里定义的方法将委托给相关的文件系统提供程序来执行文件操作。

方法

类型和参数方法和描述
static longcopy(InputStream in, Path target, CopyOption... options)

将输入流中的所有字节复制到文件。

static longcopy(Path source, OutputStream out)

将文件中的所有字节复制到输出流。

static Pathcopy(Path source, Path target, CopyOption... options)

将文件复制到目标文件。

static PathcreateDirectories(Path dir, FileAttribute<?>... attrs)

首先创建所有不存在的父目录来创建目录。

static PathcreateDirectory(Path dir, FileAttribute<?>... attrs)

创建一个新的目录。

static PathcreateFile(Path path, FileAttribute<?>... attrs)

创建一个新的和空的文件,如果该文件已存在失败。

static PathcreateLink(Path link, Path existing)

为现有文件创建新的链接(目录条目) (可选操作)

static PathcreateSymbolicLink(Path link, Path target, FileAttribute<?>... attrs)

创建到目标的符号链接 (可选操作)

static PathcreateTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs)

在指定的目录中创建一个新目录,使用给定的前缀生成其名称。

static PathcreateTempDirectory(String prefix, FileAttribute<?>... attrs)

在默认临时文件目录中创建一个新目录,使用给定的前缀生成其名称。

static PathcreateTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs)

在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。

static PathcreateTempFile(String prefix, String suffix, FileAttribute<?>... attrs)

在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。

static voiddelete(Path path)

删除文件。

static booleandeleteIfExists(Path path)

删除文件(如果存在)。

static booleanexists(Path path, LinkOption... options)

测试文件是否存在。

static Stream<Path>find(Path start, int maxDepth, BiPredicate<Path,BasicFileAttributes> matcher, FileVisitOption... options)

返回一个 Stream ,它通过搜索基于给定起始文件的文件树中的文件来懒惰地填充 Path

static ObjectgetAttribute(Path path, String attribute, LinkOption... options)

读取文件属性的值。

static <V extends FileAttributeView>
V
getFileAttributeView(Path path, <V> type, LinkOption... options)

返回给定类型的文件属性视图。

static FileStoregetFileStore(Path path)

返回表示文件所在文件存储区的 FileStore

static FileTimegetLastModifiedTime(Path path, LinkOption... options)

返回文件的上次修改时间。

static UserPrincipalgetOwner(Path path, LinkOption... options)

返回文件的所有者。

static Set<PosixFilePermission>getPosixFilePermissions(Path path, LinkOption... options)

返回文件的POSIX文件权限。

static booleanisDirectory(Path path, LinkOption... options)

测试文件是否是目录。

static booleanisExecutable(Path path)

测试文件是否可执行。

static booleanisHidden(Path path)

告知文件是否被 隐藏

static booleanisReadable(Path path)

测试文件是否可读。

static booleanisRegularFile(Path path, LinkOption... options)

测试文件是否是具有不透明内容的常规文件。

static booleanisSameFile(Path path, Path path2)

测试两个路径是否找到相同的文件。

static booleanisSymbolicLink(Path path)

测试文件是否是符号链接。

static booleanisWritable(Path path)

测试文件是否可写。

static Stream<String>lines(Path path)

Stream读取文件中的所有行。

static Stream<String>lines(Path path, Charset cs)

从文件中读取所有行作为 Stream

static Stream<Path>list(Path dir)

返回一个懒惰的填充 Stream ,其元素是 Stream中的条目。

static Pathmove(Path source, Path target, CopyOption... options)

将文件移动或重命名为目标文件。

static BufferedReadernewBufferedReader(Path path)

打开一个文件进行阅读,返回一个 BufferedReader以高效的方式从文件读取文本。

static BufferedReadernewBufferedReader(Path path, Charset cs)

打开一个文件进行阅读,返回一个 BufferedReader ,可以用来以有效的方式从文件读取文本。

static BufferedWriternewBufferedWriter(Path path, Charset cs, OpenOption... options)

打开或创建一个写入文件,返回一个 BufferedWriter ,可以用来以有效的方式将文本写入文件。

static BufferedWriternewBufferedWriter(Path path, OpenOption... options)

打开或创建一个写入文件,返回一个 BufferedWriter以高效的方式写入文件。

static SeekableByteChannelnewByteChannel(Path path, OpenOption... options)

打开或创建文件,返回可访问的字节通道以访问该文件。

static SeekableByteChannelnewByteChannel(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs)

打开或创建文件,返回可访问的字节通道以访问该文件。

static DirectoryStream<Path>newDirectoryStream(Path dir)

打开一个目录,返回一个DirectoryStream以遍历目录中的所有条目。

static DirectoryStream<Path>newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter)

打开一个目录,返回一个DirectoryStream来迭代目录中的条目。

static DirectoryStream<Path>newDirectoryStream(Path dir, String glob)

打开一个目录,返回一个DirectoryStream来迭代目录中的条目。

static InputStreamnewInputStream(Path path, OpenOption... options)

打开一个文件,返回输入流以从文件中读取。

static OutputStreamnewOutputStream(Path path, OpenOption... options)

打开或创建文件,返回可用于向文件写入字节的输出流。

static booleannotExists(Path path, LinkOption... options)

测试此路径所在的文件是否不存在。

static StringprobeContentType(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>
A
readAttributes(Path path, <A> type, LinkOption... options)

读取文件的属性作为批量操作。

static Map<String,Object>readAttributes(Path path, String attributes, LinkOption... options)

读取一组文件属性作为批量操作。

static PathreadSymbolicLink(Path link)

读取符号链接的目标 (可选操作)

static PathsetAttribute(Path path, String attribute, Object value, LinkOption... options)

设置文件属性的值。

static PathsetLastModifiedTime(Path path, FileTime time)

更新文件上次修改的时间属性。

static PathsetOwner(Path path, UserPrincipal owner)

更新文件所有者。

static PathsetPosixFilePermissions(Path path, Set<PosixFilePermission> perms)

设置文件的POSIX权限。

static longsize(Path path)

返回文件的大小(以字节为单位)。

static Stream<Path>walk(Path start, FileVisitOption... options)

返回一个 Stream ,它通过 Path根据给定的起始文件的文件树懒惰地填充 Path

static Stream<Path>walk(Path start, int maxDepth, FileVisitOption... options)

返回一个 Stream ,它是通过走根据给定的起始文件的文件树懒惰地填充 Path

static PathwalkFileTree(Path start, FileVisitor<? super Path> visitor)

走一个文件树。

static PathwalkFileTree(Path start, Set<FileVisitOption> options, int maxDepth, FileVisitor<? super Path> visitor)

走一个文件树。

static Pathwrite(Path path, byte[] bytes, OpenOption... options)

将字节写入文件。

static Pathwrite(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options)

将文本行写入文件。

static Pathwrite(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());
		}


	}
}

 

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值