【发布时间】:2009-10-16 01:09:54
【问题描述】:
是否已经有一个现有的对象/方法能够告诉我们正在运行的 Java 应用程序安装在哪个驱动器上?
谢谢。
法里德
【问题讨论】:
标签: java
是否已经有一个现有的对象/方法能够告诉我们正在运行的 Java 应用程序安装在哪个驱动器上?
谢谢。
法里德
【问题讨论】:
标签: java
在 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 系统上,这将不太有用,因为根始终是 /
【讨论】:
查看此示例:http://littletutorials.com/2008/03/10/getting-file-system-details-in-java/
在 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));
}
}
}
HOMEDRIVE 在 Unix 环境中不作为一个概念存在。
【讨论】:
根据java.io.Filejavadoc:
抽象路径名的父级可以 可以通过调用 getParent() 这个类的方法和 由路径名的前缀和 路径名中的每个名称 顺序除了最后一个。每个 目录的绝对路径名是 任何 File 对象的祖先 绝对抽象路径名 以目录的绝对值开头 路径名。例如,目录 由抽象路径名表示 “/usr”是目录的祖先 由路径名表示 “/usr/local/bin”。
前缀概念用于处理 UNIX 平台上的根目录, 和驱动器说明符,根目录 和 Microsoft Windows 上的 UNC 路径名 平台,如下:
对于 UNIX 平台,绝对路径名的前缀始终是“/”。 相对路径名没有前缀。这 表示根的抽象路径名 目录具有前缀“/”和 空名称序列。
对于 Microsoft Windows 平台,包含驱动器说明符的路径名前缀由驱动器号组成,后跟“:”,如果路径名是绝对路径,则可能后跟“\\”。 UNC 路径名的前缀是“\\\\”;主机名和共享名是名称序列中的前两个名称。未指定驱动器的相对路径名没有前缀。
所以一个解决方案可能是创建一个相对的File 对象(使用"." 作为当前目录),获取父级并提取驱动器号。这当然是不可移植的。
【讨论】:
如果你想知道正在运行的系统的当前工作目录,你可以使用如下:
String currentDirectory = System.getProperty("user.dir");
这会告诉你它开始的目录,通常是 Jar 文件所在的位置,或者类路径的根目录。
编辑: System Class javadoc for the method getProperties() 具有一组通用的可用系统属性。
【讨论】: