Java获取与Jar相同的目录中的文件夹

时间:2013-12-16 10:53:30

标签: java file jar io

假设我的桌面上有一个导出的Jar文件,然后是我想要访问的文件夹,所以我的jar文件可以从中加载文件。如何在不对路径进行硬编码的情况下访问该文件夹?

5 个答案:

答案 0 :(得分:4)

见这里:https://stackoverflow.com/a/6849255/514463

选择一个您想要目录的类,例如:Test:

String path = Test.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String decodedPath = URLDecoder.decode(path, "UTF-8");

答案 1 :(得分:2)

如果我清楚地了解,您可以在尝试访问文件夹时使用相对路径。例如,如果您将jar作为独立应用程序运行,则相对路径为“。”。将是一个包含你的jar的文件夹。因此,当您将jar.txt文件放在jar旁边时,您可以通过以下方式访问它:

new File("./names.txt");

希望我理解你的方式,这将有所帮助。

答案 2 :(得分:0)

File f = new File("Folder")

此File对象指向Jar的工作目录中的“Folder”目录。

答案 3 :(得分:0)

以下代码应提供包含JAR文件的目录:

URL url = getClass().getProtectionDomain().getCodeSource().getLocation();
File directory = new File(url.toURI()).getParentFile();

答案 4 :(得分:0)

嗯...

我经常听到这个问题,它总是归结为:如何在运行时加载资源?

这类问题的主要原因是,一个是开发应用程序,现在想要创建一个可分发的包。这通常以类似的结尾结束:

... / my-application-folder
       | -- lib / *.jar
       | -- main.jar
       | -- config.properties

可能有几个配置文件。应用程序本身的配置,使用的日志框架的配置等。无关紧要。如果要访问此类资源,则应分两步执行:

1)确保包含资源的所有文件夹(此类配置文件都是资源)是类路径的一部分。如果使用java -jar main.jar命令运行JAR文件(此处为main.jar),则此JAR文件应包含包含目录.的清单文件以及类路径条目中所有需要的库JAR。 [替代方案:也许所有配置文件都位于配置/子文件夹中。那么这个文件夹必须是class-path的一部分。]

2)在您的应用程序中,您可以使用类加载器访问这些资源:

ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource(neededResource);
// do something with url, e.g. open stream, read from it, and close stream

如果您有用户可自定义的路径,则有多种可能性。例如,您可以将系统属性传递给应用程序,正如Reddy在他的评论中所建议的那样。您还可以在配置文件中拥有一个属性,您将在应用程序的开头部分加载该属性。但是,您手头有这个可自定义文件夹的路径(在运行时)。然后执行以下操作:

String customizablePath = getCustomizablePath();
URL customizablePathURL = new File(customizablePath).toURI().toURL();
ClassLoader loader = new URLClassLoader(new URL[] {customizablePathURL});

然后你可以像上面一样继续。