我想找出我的Java应用程序在Mac上运行的驱动器的根目录。我使用以下代码在Windows上工作,但我不知道如何使它在OSx上工作:
// Method to determine and return the drive the application is running on
public static String getDriveRunningOn(){
// Get the root of all the drives attached to the computer
File[] roots = File.listRoots();
// Get the actual location of the application
// Loop through the roots and check if any match the start of the application's running path
for(int i = 0; i < roots.length; i++)
if(getAppPath().startsWith(roots[i].toString())){
String root = roots[i].toString();
//if(root.endsWith(File.separator) && root.length() > 1) root = root.substring(0, root.length() - 1);
return root;
}
// If the above loop doesn't find a match, just treat the folder the application is running in as the drive
return ".";
}
public static String getAppPath(){
try{
String appPath = MyCellRenderer.class.getProtectionDomain().getCodeSource().getLocation().getPath();
appPath = URLDecoder.decode(appPath, "UTF-8");
return new File(appPath).getAbsolutePath();
}catch(Exception e){return "n/a";}
}
因此,如果应用位于C:\App.exe
,则getDriveRunningOn()
会输出C:\
,依此类推。我需要在Mac OSX上发生同样的事情。提前致谢
答案 0 :(得分:1)
好的,事实证明Mac File.listRoots()
只列出/
。我不确定这是否是因为它只将内部驱动器视为“根”或者它的作用是什么。幸运的是,在Mac中,所有驱动器/卷(包括USB驱动器,基本上是计算机中列出的驱动器/卷)都显示为/Volumes
目录中的文件夹。
因此,我只是在if
方法中添加了getDriveRunningOn()
语句,如果在Mac上,则将new File("/Volumes").listFiles()
返回到文件数组而不是File.listRoots()
。简单:)