Java - Mac和Windows之间的文件getFreeSpace差异

时间:2014-06-02 15:44:26

标签: java windows macos java-io

我正试图从我的NAS获得可用空间,但Mac和Windows返回不同的值。 我使用java.io.File和方法getFreeSpace。

Mac结果, 不正确

39.13465499 ... GB

Windows结果, 正确

4134.864555 ... GB

我的代码:

    private static String multiMediaFolder;
    private static long freeDiskSpace;


public static void main(String[] args) {

    if (System.getProperty("os.name").equals("Mac OS X")){
        multiMediaFolder = "/Volumes/Multimedia/movies/HD";
    } else if (System.getProperty("os.name").substring(0, 7).equals("Windows")){
        multiMediaFolder = "\\\\QNAP\\Multimedia\\movies\\HD";
    }

    freeDiskSpace = new File(multiMediaFolder).getFreeSpace();
    double sizeInGigaByte = (double) freeDiskSpace / 1024 / 1024 / 1024; 

    System.out.println(sizeInGigaByte);
 }

路径不同,但指向同一个文件夹。为什么Mac版本与Windows版本不同?

1 个答案:

答案 0 :(得分:0)

我得到了答案。有两个不同之处,就像我在上面的帖子中看到的那样。

Linux返回4326416688< - 这是千字节。

Mac(就像linux一样)返回4326416688< - 也是千字节。

Windows返回一个更大的数字4429798060032< - 这是字节。

这解释了为什么Windows值是正确的。

我现在要使用的代码:

private static String multiMediaFolder;
private static long freeDiskSpace;
private static double sizeInGigaByte;


public static void main(String[] args) {

   if (System.getProperty("os.name").equals("Mac OS X")){
       multiMediaFolder = "/Volumes/Multimedia/movies/HD";
       freeDiskSpace = new File(multiMediaFolder).getFreeSpace();
       sizeInGigaByte = (double) freeDiskSpace / 1024 / 1024;
   } else if (System.getProperty("os.name").substring(0, 7).equals("Windows")){
       multiMediaFolder = "\\\\QNAP\\Multimedia\\movies\\HD";
       freeDiskSpace = new File(multiMediaFolder).getFreeSpace();
       sizeInGigaByte = (double) freeDiskSpace / 1024 / 1024 / 1024;
   }

   System.out.println(sizeInGigaByte);
}