Java7 引入了新的输入/输出2(NIO.2)API并提供了一个新的I/O API。
它向Java类库添加了三个包:java.nio.file
,java.nio.file.attribute
和java.nio.file.spi
。
文件系统
FileSystem
类的对象表示Java程序中的文件系统。FileSystem
对象用于执行两个任务:
- Java程序和文件系统之间的接口。
- 一个工厂,它用于创建许多类型的文件系统相关对象和服务。
FileSystem
对象与平台相关。
创建文件系统
要获取默认的FileSystem
对象,需要使用FileSystems
类的getDefault()
静态方法,如下所示:
FileSystem fs = FileSystems.getDefault()
FileSystem
由一个或多个FileStore
组成。FileSystem
的getFileStores()
方法返回FileStore
对象的迭代器(Iterator
)。FileSystem
的getRootDirectories()
方法返回Path
对象的迭代器,它表示到所有顶级目录的路径。FileSystem
的isReadOnly()
方法判断是否获得文件存储的只读访问权限。例
以下代码显示如何使用FileSystem
对象。
import java.nio.file.FileStore
import java.nio.file.FileSystem
import java.nio.file.FileSystems
import java.nio.file.Path
import java.io.IOException
public class Main {
public static void main(String[] args) {
FileSystem fs = FileSystems.getDefault()
System.out.println("Read-only file system: " + fs.isReadOnly())
System.out.println("File name separator: " + fs.getSeparator())
for (FileStore store : fs.getFileStores()) {
printDetails(store)
}
for (Path root : fs.getRootDirectories()) {
System.out.println(root)
}
}
public static void printDetails(FileStore store) {
try {
String desc = store.toString()
String type = store.type()
long totalSpace = store.getTotalSpace()
long unallocatedSpace = store.getUnallocatedSpace()
long availableSpace = store.getUsableSpace()
System.out.println(desc + ", Total: " + totalSpace + ", Unallocated: "
+ unallocatedSpace + ", Available: " + availableSpace)
} catch (IOException e) {
e.printStackTrace()
}
}
}
上面的代码生成以下结果(不同的环境可能结果不太一样)。
Read-only file system: false
File name separator: \
System (C:), Total: 53694595072, Unallocated: 9739976704, Available: 9739976704
Software (D:), Total: 149264121856, Unallocated: 50061234176, Available: 50061234176
Documents (E:), Total: 149264121856, Unallocated: 75025080320, Available: 75025080320
Others (F:), Total: 147882274816, Unallocated: 57207463936, Available: 57207463936
C:\
D:\
E:\
F:\