0

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.exegetDriveRunningOn()出力C:\などが行われます。Mac OSX でも同じことが必要です。前もって感謝します

4

1 に答える 1

1

わかりましたので、MacFile.listRoots()のみのリストであることがわかりました/。これが内部ドライブを「ルート」としてしか認識していないためなのか、それとも何なのかはわかりませんが、それが機能していることです。幸いなことに、Mac では、接続されているすべてのドライブ/ボリューム (USB ドライブを含み、基本的に [コンピューター] にリストされているもの) が/Volumesディレクトリ内のフォルダーとして表示されます。

したがって、ifMacgetDriveRunningOn()の場合new File("/Volumes").listFiles()File.listRoots(). シンプル:)

于 2012-08-27T15:58:23.120 に答える