如何知道Java应用程序安装在哪个驱动器上?

如何知道Java应用程序安装在哪个驱动器上?,java,Java,是否已有一个现有的对象/方法能够告诉我们正在运行的Java应用程序安装在哪个驱动器上 谢谢 Farid检查这个例子: 在Windows环境中,可以读取HOMEDRIVE变量。 如果运行此代码,您将看到所有可用的环境变量 import java.util.Map; public class EnvMap { public static void main (String[] args) { Map<String, String> env = System.ge

是否已有一个现有的对象/方法能够告诉我们正在运行的Java应用程序安装在哪个驱动器上

谢谢

Farid检查这个例子:

在Windows环境中,可以读取HOMEDRIVE变量。 如果运行此代码,您将看到所有可用的环境变量

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n", envName, env.get(envName));
        }
    }
}
import java.util.Map;
公共类环境映射{
公共静态void main(字符串[]args){
Map env=System.getenv();
for(字符串envName:env.keySet()){
System.out.format(“%s=%s%n”,envName,env.get(envName));
}
}
}
HOMEDRIVE在Unix环境中不作为一个概念存在。

检查此示例:

在Windows环境中,可以读取HOMEDRIVE变量。 如果运行此代码,您将看到所有可用的环境变量

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n", envName, env.get(envName));
        }
    }
}
import java.util.Map;
公共类环境映射{
公共静态void main(字符串[]args){
Map env=System.getenv();
for(字符串envName:env.keySet()){
System.out.format(“%s=%s%n”,envName,env.get(envName));
}
}
}

HOMEDRIVE在Unix环境中不是一个概念。

在Windows上尝试以下操作:

File file = new File(".").getAbsoluteFile();
File root = file.getParentFile();
while (root.getParentFile() != null) {
    root = root.getParentFile();
}
System.out.println("Drive is: "+root.getPath());

在Unix系统上,这将不太有用,因为根目录始终是/

请在Windows上尝试以下操作:

File file = new File(".").getAbsoluteFile();
File root = file.getParentFile();
while (root.getParentFile() != null) {
    root = root.getParentFile();
}
System.out.println("Drive is: "+root.getPath());
在Unix系统上,这将不太有用,因为根据javadoc,根始终是/

抽象路径名的父级可能 可以通过调用 该类的方法和 由路径名的前缀和 路径名的名称中的每个名称 顺序,除了最后一个。每个 目录的绝对路径名是 具有 绝对抽象路径名 从目录的绝对值开始 路径名。例如,目录 由抽象路径名表示 “/usr”是目录的祖先 由路径名表示 “/usr/local/bin”

前缀概念用于处理 UNIX平台上的根目录, 和驱动器说明符、根目录 和Microsoft Windows上的UNC路径名 平台,如下所示:

  • 对于UNIX平台,绝对路径名的前缀始终为“/”。 相对路径名没有前缀。这个 表示根的抽象路径名 目录具有前缀“/”和 空名称序列

  • 对于Microsoft Windows平台,包含驱动器说明符的路径名前缀由驱动器号后跟“:”组成,如果路径名是绝对的,则可能后跟“\\”。UNC路径名的前缀为“\\\”;主机名和共享名是名称序列中的前两个名称。不指定驱动器的相对路径名没有前缀

因此,解决方案可能是创建一个相对的
文件
对象(对当前目录使用
),获取父目录并提取驱动器号。这当然是不可移植的。

根据javadoc:

抽象路径名的父级可能 可以通过调用 该类的方法和 由路径名的前缀和 路径名的名称中的每个名称 顺序,除了最后一个。每个 目录的绝对路径名是 具有 绝对抽象路径名 从目录的绝对值开始 路径名。例如,目录 由抽象路径名表示 “/usr”是目录的祖先 由路径名表示 “/usr/local/bin”

前缀概念用于处理 UNIX平台上的根目录, 和驱动器说明符、根目录 和Microsoft Windows上的UNC路径名 平台,如下所示:

  • 对于UNIX平台,绝对路径名的前缀始终为“/”。 相对路径名没有前缀。这个 表示根的抽象路径名 目录具有前缀“/”和 空名称序列

  • 对于Microsoft Windows平台,包含驱动器说明符的路径名前缀由驱动器号后跟“:”组成,如果路径名是绝对的,则可能后跟“\\”。UNC路径名的前缀为“\\\”;主机名和共享名是名称序列中的前两个名称。不指定驱动器的相对路径名没有前缀


因此,解决方案可能是创建一个相对的
文件
对象(对当前目录使用
),获取父目录并提取驱动器号。这当然是不可移植的。

如果您想知道正在运行的系统的当前工作目录,请使用以下命令:

String currentDirectory = System.getProperty("user.dir");
这将告诉您启动它的目录,通常是Jar文件所在的目录,或者类路径的根所在的目录

编辑:
具有可用的通用系统属性集。

如果要了解正在运行的系统的当前工作目录,请使用以下选项:

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n", envName, env.get(envName));
        }
    }
}
String currentDirectory = System.getProperty("user.dir");
这将告诉您启动它的目录,通常是Jar文件所在的目录,或者类路径的根所在的目录

编辑: 具有可用的通用系统属性集

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n", envName, env.get(envName));
        }
    }
}