假设我的桌面上有一个导出的Jar文件,然后是我想要访问的文件夹,所以我的jar文件可以从中加载文件。如何在不对路径进行硬编码的情况下访问该文件夹?
答案 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});
然后你可以像上面一样继续。