You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中获取Windows共享文件夹的磁盘使用统计信息?

在Java中获取共享文件夹(如//shared/content)的空间信息

核心方案:Java标准库File/Path API

Java标准IO库直接支持对挂载的共享目录(包括NFS、SMB等)获取空间统计,无需依赖第三方库。关键是确保共享目录已正确挂载到本地文件系统(Linux),或在Windows下映射为网络驱动器。

1. Java 7+ 推荐方案:使用Files类

通过Files.getFileStore()获取路径对应的存储对象,进而读取空间数据:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.FileStore;

public class SharedDirSpace {
    public static void main(String[] args) {
        // Linux下直接用挂载后的路径,如"/mnt/shared/content";Windows可用映射驱动器如"Z:\\content"
        Path sharedPath = Paths.get("//shared/content");
        
        try {
            FileStore store = Files.getFileStore(sharedPath);
            
            long totalSpace = store.getTotalSpace();
            long usableSpace = store.getUsableSpace();
            long unallocatedSpace = store.getUnallocatedSpace();
            
            System.out.printf("总空间: %.2f GB%n", totalSpace / (1024.0 * 1024 * 1024));
            System.out.printf("可用空间: %.2f GB%n", usableSpace / (1024.0 * 1024 * 1024));
            System.out.printf("未分配空间: %.2f GB%n", unallocatedSpace / (1024.0 * 1024 * 1024));
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("无法获取共享目录空间信息:" + e.getMessage());
        }
    }
}

2. Java 6 兼容方案:使用File类

如果项目仍基于Java 6,可通过File类的方法实现:

import java.io.File;

public class SharedDirSpaceLegacy {
    public static void main(String[] args) {
        File sharedDir = new File("//shared/content");
        
        if (sharedDir.exists() && sharedDir.isDirectory()) {
            long totalSpace = sharedDir.getTotalSpace();
            long usableSpace = sharedDir.getUsableSpace();
            long freeSpace = sharedDir.getFreeSpace();
            
            System.out.printf("总空间: %.2f GB%n", totalSpace / (1024.0 * 1024 * 1024));
            System.out.printf("可用空间: %.2f GB%n", usableSpace / (1024.0 * 1024 * 1024));
            System.out.printf("空闲空间: %.2f GB%n", freeSpace / (1024.0 * 1024 * 1024));
        } else {
            System.err.println("共享目录不存在或不是有效目录");
        }
    }
}

Linux下NFS场景的关键注意事项

  • 必须先将//shared/content通过NFS挂载到本地(比如挂载到/mnt/shared/content),直接使用挂载后的本地路径才能获取正确的空间数据。
  • 若未挂载,Java无法直接访问未挂载的NFS路径,需先通过系统mount命令完成挂载(也可在Java中调用系统命令执行挂载)。

为什么OSHI无法获取?

OSHI主要读取系统本地磁盘/存储设备的信息,对于网络共享存储,只有当它被识别为系统挂载点时才会被扫描。而Java标准库直接针对文件系统路径获取所在存储的信息,更适配共享目录场景。

常见问题排查

  • 权限问题:运行Java程序的用户必须拥有共享目录的读取权限,否则会抛出权限异常。
  • 路径格式:Linux下SMB共享需用smb://shared/content,且需安装cifs-utils等客户端工具并完成挂载;NFS使用标准挂载路径即可。
  • 连接问题:若共享目录无法访问,会抛出IOException,需检查网络连接和共享配置。

内容的提问来源于stack exchange,提问作者Shubhankar Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:35:09