简体   繁体   English

Java-Mac和Windows之间的文件getFreeSpace区别

[英]Java - File getFreeSpace difference between Mac and Windows

I am trying to get the free space from my NAS, but Mac and Windows return different values. 我正在尝试从NAS获取可用空间,但是Mac和Windows返回不同的值。 I use java.io.File and the method getFreeSpace. 我使用java.io.File和方法getFreeSpace。

Mac outcome, which is incorrect : Mac结果,这是不正确的

39.13465499... GB 39.13465499 ... GB

Windows outcome, which is correct : Windows结果,这是正确的

4134.864555... GB 4134.864555 ... GB

My code: 我的代码:

    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);
 }

The paths are different, but point at the same folder. 路径不同,但是指向相同的文件夹。 Why is the Mac version way different than the Windows version? 为什么Mac版本与Windows版本不同?

I've got my answer. 我有我的答案。 There are two differences, like we saw in my post above me. 有两个区别,就像我们在我上方的帖子中看到的那样。

Linux returns 4326416688 <- which are kilobytes. Linux返回4326416688 <-千字节。

Mac (just like linux) returns 4326416688 <- which are kilobytes too. Mac(就像linux)也返回4326416688 <-,这也是千字节。

Windows returns a bigger number 4429798060032 <- which are bytes. Windows返回更大的数字4429798060032 <-字节。

This explains why the Windows value was correct. 这解释了为什么Windows值正确。

The code that I am going to use now: 我现在要使用的代码:

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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM