public final class FileSystems extends Object
getDefault
方法来获取默认文件系统和工厂方法来构建其他类型的文件系统。
第一次调用此类定义的任何方法将导致默认的provider
被加载。 由URI方案“文件”标识的默认提供程序创建FileSystem
,该文件提供对Java虚拟机可访问的文件系统的访问。 如果加载或初始化默认提供程序的过程失败,则抛出未指定的错误。
通过调用此类定义的任何newFileSystem方法,首次调用newFileSystem
方法可查找并加载所有已安装的文件系统提供程序。 使用由ServiceLoader
类定义的服务提供商加载设施来加载安装的提供程序。 使用系统类加载器加载安装的提供程序。 如果无法找到系统类加载器,则使用扩展类加载器; 如果没有扩展类加载器,则使用引导类加载器。 提供商通常通过将它们放置在应用程序类路径或扩展目录中的JAR文件中,JAR文件包含资源目录META-INF/services
中名为java.nio.file.spi.FileSystemProvider
的提供程序配置文件,文件列出一个或多个完全限定名称的具体子类的FileSystemProvider
有一个无参数的构造。 安装提供商所在的订购是具体的实现。 如果提供者被实例化,并且其getScheme
返回先前实例化的提供者的相同URI方案,则最近被实例化的重复被丢弃。 比较URI方案而不考虑情况。 在施工期间,提供商可以安全地访问与默认提供商相关的文件,但需要注意避免其他已安装提供程序的循环加载。 如果检测到已安装提供程序的循环加载,则会抛出未指定的错误。
此类还定义工厂方法允许ClassLoader
到指定定位提供商时。 与安装的提供程序一样,通过将提供程序配置文件放在资源目录META-INF/services
中来标识提供程序类。
如果一个线程启动了安装的文件系统提供程序的加载,另一个线程调用一个也试图加载提供程序的方法,那么该方法将阻塞,直到加载完成。
Modifier and Type | Method and Description |
---|---|
static FileSystem |
getDefault()
返回默认值
FileSystem 。
|
static FileSystem |
getFileSystem(URI uri)
返回对现有
FileSystem 。
|
static FileSystem |
newFileSystem(Path path, ClassLoader loader)
构造一个新的
FileSystem 以访问文件的内容作为文件系统。
|
static FileSystem |
newFileSystem(URI uri, Map<String,?> env)
构造一个通过鉴定的新文件系统 URI
|
static FileSystem |
newFileSystem(URI uri, Map<String,?> env, ClassLoader loader)
构造一个通过鉴定的新文件系统 URI
|
public static FileSystem getDefault()
FileSystem
。
默认文件系统创建可以访问Java虚拟机可访问的文件系统的对象。
文件系统的工作目录是当前用户目录,由系统属性user.dir
。
这允许与java.io.File
类的互操作性 。
第一次调用此类定义的任何方法定位默认的provider
对象。 在没有定义系统属性java.nio.file.spi.DefaultFileSystemProvider
的情况下,默认提供程序是被调用以创建默认文件系统的系统默认提供程序。
如果定义了系统属性java.nio.file.spi.DefaultFileSystemProvider
,则将其视为由URI方案"file"
的具体提供者类的一个或多个完全限定名称的"file"
。 如果属性是多个名称的列表,则名称将以逗号分隔。 使用系统类加载器加载每个类,并通过调用形式参数类型为FileSystemProvider
的一个参数构造函数实例FileSystemProvider
。 提供者按照属性中列出的顺序加载和实例化。 如果此过程失败或提供程序的方案不等于"file"
则抛出未指定的错误。 通常比较URI方案而不考虑情况,但对于默认提供者,该方案需要为"file"
。 第一个提供程序类通过使用对系统默认提供程序的引用进行调用来实例化。 第二个提供者类通过使用对第一个提供者实例的引用进行调用来实例化。 第三个提供者类通过使用对第二个实例的引用进行调用来实例化,依此类推。 要实例化的最后一个提供者将成为默认提供者; 使用URI "file:///"
调用其getFileSystem
方法来获取对默认文件系统的引用。
此方法的后续调用返回由第一次调用返回的文件系统。
public static FileSystem getFileSystem(URI uri)
FileSystem
。
该方法遍历installed
提供程序,以定位由给定URI的URI scheme
标识的提供程序。 比较URI方案而不考虑情况。 URI的确切形式依赖于高度依赖于提供商。 如果发现,提供者的getFileSystem
方法被调用以获得对FileSystem的FileSystem
。
一旦由此提供程序创建的文件系统是closed
它是依赖提供者的,如果此方法返回对封闭文件系统的引用或者引用FileSystemNotFoundException
。 如果提供程序允许创建与之前创建的文件系统相同的URI的新文件系统,那么如果在文件系统关闭之后调用该方法(在newFileSystem
方法创建新实例之前),则此方法将抛出异常。
如果安装了安全管理器,则提供者实现可能需要在返回对现有文件系统的引用之前检查权限。 在default
文件系统的情况下,不需要权限检查。
uri
- 查找文件系统的URI
IllegalArgumentException
- 如果不符合
uri
参数的前提条件
FileSystemNotFoundException
- 如果由URI标识的文件系统不存在
ProviderNotFoundException
- 如果未安装支持URI方案的提供者
SecurityException
- 如果安装了一个安全管理器,并且它拒绝了未指定的权限
public static FileSystem newFileSystem(URI uri, Map<String,?> env) throws IOException
URI
该方法遍历installed
提供程序,以查找由给定URI的URI scheme
标识的提供程序。 比较URI方案而不考虑情况。 URI的确切形式依赖于高度依赖于提供商。 如果找到,则调用提供程序的newFileSystem(URI,Map)
方法来构造新的文件系统。
一旦文件系统为closed
,如果提供程序允许使用与之前创建的文件系统相同的URI创建新的文件系统,则依赖于提供程序。
使用示例:假设有一个由方案"memory"
标识的提供商:
Map<String,String> env = new HashMap<>();
env.put("capacity", "16G");
env.put("blockSize", "4k");
FileSystem fs = FileSystems.newFileSystem(URI.create("memory:///?name=logfs"), env);
uri
- 标识文件系统的URI
env
- 配置文件系统的提供程序特定属性的映射;
可能是空的
IllegalArgumentException
- 如果不符合
uri
前提条件,或者
env
参数不包含提供程序所需的属性,或属性值无效
FileSystemAlreadyExistsException
- 如果文件系统已经创建
ProviderNotFoundException
- 如果没有安装支持URI方案的提供者
IOException
- 如果在创建文件系统时发生I / O错误
SecurityException
- 如果安装了一个安全管理器,并且它拒绝文件系统提供程序实现所需的未指定权限
public static FileSystem newFileSystem(URI uri, Map<String,?> env, ClassLoader loader) throws IOException
URI
该方法首先尝试以与newFileSystem(URI,Map)
方法完全相同的方式查找已安装的提供程序。 如果没有一个安装的提供程序支持URI方案,则尝试使用给定的类加载器来定位提供程序。 如果提供者支持URI方案,则调用其newFileSystem(URI,Map)
来构造新的文件系统。
uri
- 标识文件系统的URI
env
- 配置文件系统的提供者特定属性的映射;
可能是空的
loader
- 查找提供程序的类加载器或
null
仅尝试查找已安装的提供程序
IllegalArgumentException
- 如果不符合
uri
前提条件,或者
env
参数不包含提供程序所需的属性,或属性值无效
FileSystemAlreadyExistsException
- 如果URI方案标识已安装的提供程序,并且文件系统已经创建
ProviderNotFoundException
- 如果没有找到支持URI方案的提供者
ServiceConfigurationError
- 加载服务提供商时发生错误
IOException
- 创建文件系统时发生I / O错误
SecurityException
- 如果安装了一个安全管理器,并且它拒绝文件系统提供程序实现所需的未指定权限
public static FileSystem newFileSystem(Path path, ClassLoader loader) throws IOException
FileSystem
以访问文件的内容作为文件系统。
该方法利用专门的提供者创建伪文件系统,其中一个或多个文件的内容被视为一个文件系统。
该方法遍及installed
提供商。 它依次使用空的地图调用每个提供者的newFileSystem(Path,Map)
方法。 如果提供者返回文件系统,则迭代将终止,并返回文件系统。 如果没有一个已安装的提供程序返回FileSystem
那么尝试使用给定的类加载器来定位提供程序。 如果提供程序返回文件系统,则查找将终止,并返回文件系统。
path
- 文件的路径
loader
- 查找提供程序的类加载器或
null
只尝试找到已安装的提供程序
ProviderNotFoundException
- 如果无法找到支持此文件类型的提供程序
ServiceConfigurationError
- 加载服务提供商时发生错误
IOException
- 如果发生I / O错误
SecurityException
- 如果安装了一个安全管理器,并且它拒绝了未指定的权限