如何在java中获取执行目录路径[重复]
Posted
技术标签:
【中文标题】如何在java中获取执行目录路径[重复]【英文标题】:How to get the execution directory path in java [duplicate] 【发布时间】:2013-07-30 03:49:03 【问题描述】:我制作了一个纯 Java 应用程序,它告诉我给定目录中的文件数量。现在我使用以下代码设置当前目录:
`File f = new File(".");`
之后,我使用其 jar 文件制作了一个安装程序并将其安装在我的 Windows 8 中,然后将其添加到 Windows 右键单击下拉菜单(上下文菜单)中。当我从上下文菜单启动它时,它总是告诉我实际安装它的目录中的文件数,但是我想知道我正在执行它的那个目录的文件数。
所以请帮助我。我是这个领域的新手,我不希望你在当前目录和当前执行目录中混淆我。所以我写了这么长,希望用非常简单的文字得到一个干净的答案。
谢谢
【问题讨论】:
this tutorial 会帮助你吗? @maddy 文件编号[]=f.listFiles(); int x=no.length。然后打印 x; 【参考方案1】:正如 Jarrod Roberson 在his answer here 中所说:
一种方法是使用system property
System.getProperty("user.dir");
这会给你“当前 初始化属性时的工作目录”。这是 可能是你想要的。找出java
命令的位置 在您的情况下,在包含要处理的文件的目录中发出,甚至 尽管实际的 .jar 文件可能位于 机器。拥有实际 .jar 文件的目录不是 在大多数情况下很有用。下面会打印出当前目录 无论 .class 或 .jar 文件位于何处,都会调用命令 .class 文件在里面。
public class Test public static void main(final String[] args) final String dir = System.getProperty("user.dir"); System.out.println("current dir = " + dir);
如果您在
/User/me/
并且您的 .jar 文件包含上述代码 在/opt/some/nested/dir/
中,命令java -jar /opt/some/nested/dir/test.jar Test
将输出current dir = /User/me
。您还应该考虑使用良好的面向对象 命令行参数解析器。我强烈推荐JSAP,Java 简单的参数解析器。这会让你使用
System.getProperty("user.dir")
或者传入一些东西 否则覆盖行为。一个更易于维护的解决方案。 这将使传递目录进行处理非常容易, 如果没有传入任何内容,则可以使用user.dir
。
示例:GetExecutionPath
import java.util.*;
import java.lang.*;
public class GetExecutionPath
public static void main(String args[])
try
String executionPath = System.getProperty("user.dir");
System.out.print("Executing at =>"+executionPath.replace("\\", "/"));
catch (Exception e)
System.out.println("Exception caught ="+e.getMessage());
上面的输出会像
C:\javaexamples>javac GetExecutionPath.jav
C:\javaexamples>java GetExecutionPath
Executing at =>C:/javaexamples
【讨论】:
System.getProperty("user.dir")
和 new File(".")
usually return the same value。那么,根据问题,为什么这会起作用,而 new File(".")
却不起作用?
再一次,你不能简单地在你复制了别人的措辞的答案的末尾添加一个链接。您必须明确引用复制的语言,以便人们知道这不是您的原创贡献。【参考方案2】:
File Javadoc 表示通常针对当前用户目录解析相对文件。它继续:
此目录由系统属性
user.dir
命名,通常是调用 Java 虚拟机的目录。
因此new File(".")
或System.getProperty("user.dir");
将返回相同的结果。根据问题,您正在从 Windows 资源管理器上下文菜单运行,这可能与正常的 JVM 调用有点不同。
根据this tutorial,您需要做的事情如下:
-
在
HKEY_CLASSES_ROOT\Directory\Background\shell
下创建一个新的注册表项。它的名称将在 Explorer 上下文菜单中使用,因此我们将其赋值为 MyJavaApp
。
在HKEY_CLASSES_ROOT\Directory\Background\shell\MyJavaApp
下创建一个新的注册表项并将其命名为command
。它的值应该是您的 Java 应用程序的完整路径。您可以将%1
添加到命令中,作为当前选定文件/目录的占位符。这意味着将使用一个附加参数调用您的程序。
您的程序可以读取附加参数以确定从哪个目录调用它。
请注意,上述步骤(和教程)适用于 Windows Vista,因此您可能需要仔细检查它是否也适用于 Windows 8。
【讨论】:
【参考方案3】:你可以做一些疯狂的事情:
String absolute = getClass().getProtectionDomain().getCodeSource().getLocation().toExternalForm();
absolute = absolute.substring(0, absolute.length() - 1);
absolute = absolute.substring(0, absolute.lastIndexOf("/") + 1);
String configPath = absolute + "config/file.properties";
String os = System.getProperty("os.name");
if (os.indexOf("Windows") != -1)
configPath = configPath.replace("/", "\\\\");
if (configPath.indexOf("file:\\\\") != -1)
configPath = configPath.replace("file:\\\\", "");
else if (configPath.indexOf("file:") != -1)
configPath = configPath.replace("file:", "");
我用它来读出一个与执行路径相关的配置文件。您也可以使用它来获取 jar 文件的执行路径。
【讨论】:
这实际上回答了这个问题。评分较高的答案回答了他们认为更有用的问题。【参考方案4】:您可能对以下几种不同的事物感兴趣:
获取当前工作目录:String workingDir = System.getProperty("user.dir");
获取类加载器路径:URL resource = classLoader.getResource("/");
【讨论】:
System.getProperty("user.dir")
和 new File(".")
usually return the same value。那么,根据问题,为什么这会起作用,而 new File(".")
却不起作用?【参考方案5】:
以下内容可能对您有所帮助
System.getProperty("user.dir")
这会将路径作为字符串返回给您
【讨论】:
是的,我也这样做了,显然我得到了字符串中的路径,但我想知道我执行它的那个目录的路径,而不是安装它的那个目录的路径。 @Mohd Faizan Khan,我不确定你的要求。执行之前的安装路径吗?System.getProperty("user.dir")
和 new File(".")
usually return the same value。那么,根据问题,为什么这会起作用,而 new File(".")
却不起作用?以上是关于如何在java中获取执行目录路径[重复]的主要内容,如果未能解决你的问题,请参考以下文章
执行java可执行文件(.exe)时如何获取CMD的目录[重复]