在java中而不是FileSystemView中获取卷标和驱动器号之间的映射的解决方法是什么

时间:2017-12-03 11:32:21

标签: java

通过以下代码获取java中卷标和驱动器号之间的映射是可行的:

import java.io.File;
import javax.swing.filechooser.FileSystemView;
public class Test{

    public void listMap(){
        File[] files = File.listRoots();
        System.out.println("The map between volume label and drive is: " );
        for(File file: files){
            String theMap = FileSystemView.getFileSystemView().getSystemDisplayName(file);
            System.out.println(theMap);
        }
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.listMap();
    }
}

但是,从this thread开始,对我来说这不是一个可行的解决方案,FileSystemView的使用将导致我的方案中的NPE。所以我的问题是,如何在java而不是FileSystemView中获取卷lavel和驱动器号之间的映射?我已经google了很多,但没有使用FileSystemView就找不到任何东西。也许最后的解决方法是编写本机代码以获取地图并使用JNI从java调用。

1 个答案:

答案 0 :(得分:0)

最后选择在本机端实现它并使用JNI(Java Native Interface)来获取地图。

我希望Windows上的功能GetLogicalDrives作为File[] files = File.listRoots();投放,之后,GetVolumeInformation用于从驱动器获取卷标。

为可能遇到同样问题的人发布解决方案。