从放置jar文件的特定目录中获取文件

时间:2011-06-06 04:45:47

标签: java relative-path

我想从放置jar文件的目录中获取文本文件。

假设我的桌面应用程序'foo.jar'文件放在Windows的安装中的d:\中。 当'foo.jar'应用程序运行时,我想在同一目录中找到一个test.txt文件。 如何在我的'foo.jar'应用程序中获取该特定路径? 简而言之,我想获取放置它的'foo.jar'文件的路径。

3 个答案:

答案 0 :(得分:3)

请注意,实际代码确实取决于程序包中的实际类位置,但通常看起来像:

URL root = package.Main.class.getProtectionDomain().getCodeSource().getLocation();
String path = (new File(root.toURI())).getParentFile().getPath();
...
// handle file.txt in path

答案 1 :(得分:1)

使用URLClassLoader加载大多数JAR,URLClassLoader会记住加载JAR的codesource。您可以使用此知识来获取JVM加载JAR的目录的位置。您还可以使用ProtectionDomain类来获取CodeSource(如另一个答案所示;不可否认,这可能更好)。

返回的位置通常是file:协议类型,因此您必须删除此协议标识符才能获取实际位置。以下是执行此活动的简短代码段;如果您需要在生产中使用它,您可能希望构建更多错误检查和边缘案例检测:

public String getCodeSourceLocation() {
        ClassLoader contextClassLoader = CurrentJARContext.class.getClassLoader();
        if(contextClassLoader instanceof URLClassLoader)
        {
            URLClassLoader classLoader = (URLClassLoader)contextClassLoader;
            URL[] urls = classLoader.getURLs();
            String externalForm = urls[0].toExternalForm();
            externalForm = externalForm.replaceAll("file:\\/", "");
            externalForm = externalForm.replaceAll("\\/", "\\" + File.separator);
            return externalForm;
        }
        return null;
    }

答案 2 :(得分:0)

我找到了自己问题的最简答案 String path = System.getProperty(“user.dir”);