假设标准的maven设置已存在。
例如,在你的资源文件夹中有一个名为
在Java中,如何获取文件的绝对路径?
例如,在你的资源文件夹中有一个名为
abc
的文件。在Java中,如何获取文件的绝对路径?
实际有效的正确方法:
URL resource = YourClass.class.getResource("abc");
Paths.get(resource.toURI()).toFile();
现在文件在classpath物理位置上无关紧要,只要资源实际上是一个文件而不是JAR条目,它就会被找到。
(显然的new File(resource.getPath())
并不适用于所有路径!路径仍然是URL编码的!)
new File(resource.toURI()).getAbsolutePath();
(即我认为你不需要Path对象?) - Dan Kingnew File(YourClass.class.getResource("abc").toURI().getPath())
。 - Mike Rylander.getResource("/abc")
,请问这是如何生效的? - cahenYourClass::class.java.classLoader.getResource("resource.txt")
- ExactaBoxClassLoader.getResource
方法来获取正确的资源。URL res = getClass().getClassLoader().getResource("abc.txt");
File file = Paths.get(res.toURI()).toFile();
String absolutePath = file.getAbsolutePath();
或者
虽然这种方法并不总是有效的,但有一个更简单的解决方案——
您可以创建一个 File
对象并使用 getAbsolutePath
方法:
File file = new File("resources/abc.txt");
String absolutePath = file.getAbsolutePath();
target/classes/abc.txt
来引用文件,因为这是Maven在处理后放置资源文件的规范位置(例如,maven-resources插件可能已对abc.txt进行属性替换)。最好通过类路径中的getResource()方法来使用abc.txt。 - Gyro Gearless您需要指定以/
开头的路径。
URL resource = YourClass.class.getResource("/abc");
Paths.get(resource.toURI()).toFile();
getPath()
方法访问路径。 ClassLoader classLoader = getClass().getClassLoader();
String path = classLoader.getResource("chromedriver.exe").getPath();
System.out.println(path);
在获取绝对路径时会遇到两个问题:
以下代码将为我们提供所有有用的路径:
URL localPackage = this.getClass().getResource("");
URL urlLoader = YourClassName.class.getProtectionDomain().getCodeSource().getLocation();
String localDir = localPackage.getPath();
String loaderDir = urlLoader.getPath();
System.out.printf("loaderDir = %s\n localDir = %s\n", loaderDir, localDir);
这里研究了用于本地化资源文件夹的两个函数。对于class
,可以静态或动态获取。
如果项目不在插件中,在 JUnit 中运行代码将会输出:
loaderDir = /C:.../ws/source.dir/target/test-classes/
localDir = /C:.../ws/source.dir/target/test-classes/package/
getResource(resourceFolderName)
,因为该文件夹不在目标文件夹中。希望没有人将资源放在创建的文件夹中。
loaderDir = /C:.../ws/plugin/bin/
localDir = /C:.../ws/plugin/bin/package/
因此,我们需要再次上下浏览文件夹树。
最有趣的情况是当包在插件中启动时。例如,作为JUnit插件测试。输出为:
loaderDir = /C:.../ws/plugin/
localDir = /package/
我们只有将两个函数的结果结合起来才能得到绝对路径。但这还不够。在它们之间,我们应该放置类包所在地相对于插件文件夹的本地路径。可能你需要在这里插入src
或src/test/resource
之类的东西。
您可以将代码插入到您的代码中并查看您拥有的路径。
URL resource = YourClass.class.getResource("abc");
File file = Paths.get(resource.toURI()).toFile(); // return a file
String filepath = Paths.get(resource.toURI()).toFile().getAbsolutePath(); // return file path
try {
java.net.URL YourClassDir = YourClass.class.getResource("YourClass.class");
String YourClassActionDirStr = YourClassDir.toString();
System.out.println(YourClassActionDirStr);
} catch (Exception e) {
System.out.println(e);
}