欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[NIO.2] 第十七篇 读取文件存储设备的属性

程序员文章站 2022-04-28 17:28:27
...
如果将电脑看作文件存储的容器,那么有很多类型的文件存储,例如:分区、硬盘、卷标,等等。NIO.2 中可以通过  FileStore 这个抽象类来得到每种类型的文件存储信息。你可以获取文件存储的名字、类型、总空间、已用空间和剩余空间。
获得所有文件存储的属性

首先调用 FileSystems.getDefault() 方法获取默认文件系统,然后再调用 FileSystem.getFileStores() 方法得到文件存储列表。列表中的每个对象都是 FileStore 类型,可以调用上面的 name(),type(),getTotalSpace() 等方法来获取文件存储的信息。下面的代码片段将打印你机器的文件存储信息:

import java.io.IOException; 
import java.nio.file.FileStore; 
import java.nio.file.FileSystem; 
import java.nio.file.FileSystems; 
… 
FileSystem fs = FileSystems.getDefault(); 
for (FileStore store : fs.getFileStores()) { 
  try { 
        long total_space = store.getTotalSpace() / 1024; 
        long used_space = (store.getTotalSpace() - store.getUnallocatedSpace()) / 1024; 
        long available_space = store.getUsableSpace() / 1024; 
        boolean is_read_only = store.isReadOnly(); 
 
        System.out.println("--- " + store.name() + " --- " + store.type()); 
        System.out.println("Total space: " + total_space); 
        System.out.println("Used space: " + used_space); 
        System.out.println("Available space: " + available_space); 
        System.out.println("Is read only? " + is_read_only); 
 
  } catch (IOException e) { 
      System.err.println(e); 
  } 
}


下面是我运行后,在我机器上的输出结果:

---  --- NTFS 
Total space: 39070048 
Used space: 31775684 
Available space: 7294364 
---  --- NTFS 
Total space: 39070048 
Used space: 8530348 
Available space: 30539700 
--- SAMSUNG DVD RECORDER VOLUME --- UDF 
Total space: 2936192 
Used space: 2936192 
Available space: 0 


注意:从上面的例子中可以看到,如果文件存储没有名称,那么将会返回一个空字符串。另外,磁盘空间是按字节数返回的,为了可读性,你可以转换为 KB、MB 或者 GB。
获取特定文件所在的文件存储的属性

基于 FileStore 类,你可以获取某个文件所在的文件存储的属性。可以通过调用 Files.getFileStore() 方法来完成这个任务,这个方法需要传入一个 Path 对象,NIO.2 会判断文件所在的存储位置,并返回正确的文件存储信息。下面看看样例代码:

import java.io.IOException; 
import java.nio.file.FileStore; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
… 
Path path = Paths.get("C:/rafaelnadal/tournaments/2009", "BNP.txt"); 
try { 
    FileStore store = Files.getFileStore(path); 
   long total_space = store.getTotalSpace() / 1024; 
   long used_space = (store.getTotalSpace() - store.getUnallocatedSpace()) / 1024; 
   long available_space = store.getUsableSpace() / 1024; 
   boolean is_read_only = store.isReadOnly(); 
   System.out.println("--- " + store.name() + " --- " + store.type()); 
   System.out.println("Total space: " + total_space); 
   System.out.println("Used space: " + used_space); 
   System.out.println("Available space: " + available_space); 
   System.out.println("Is read only? " + is_read_only); 
} catch (IOException e) { 
   System.err.println(e); 
} 


运行后输出:

---  --- NTFS 
Total space: 39070048 
Used space: 8530348 
Available space: 30539700 
Is read only? false 


一个文件存储可能支持一个或多个 FileStoreAttributeView 类,用来提供可读或可写的文件存储属性。下面是得到 FileStoreAttributeView 类的例子:
FileStoreAttributeView fsav =  
         store.getFileStoreAttributeView(FileStoreAttributeView.class); 


注:另外,也可以直接调用 store.getAttribute() 来获取文件存储属性。

文章来源:http://www.aptusource.org/2014/03/nio-2-file-store-attributes/
相关标签: Java Java NIO.2