假设标准的 maven 设置。
假设在资源文件夹中有一个文件 abc。
abc
在 Java 中,如何得到文件的绝对路径?
可以使用 ClassLoader.getResource方法获取正确的资源。
ClassLoader.getResource
URL res = getClass().getClassLoader().getResource("abc.txt"); File file = Paths.get(res.toURI()).toFile(); String absolutePath = file.getAbsolutePath();
或者
虽然这可能不会一直有效,一个更简单的解决方案-
您可以创建一个 File对象并使用 getAbsolutePath方法:
File
getAbsolutePath
File file = new File("resources/abc.txt"); String absolutePath = file.getAbsolutePath();
真正有效的方法是:
URL resource = YourClass.class.getResource("abc"); Paths.get(resource.toURI()).toFile();
现在类路径中的文件物理位置并不重要,只要资源实际上是一个文件而不是一个 JAR 条目,就可以找到它。
(看似明显的 new File(resource.getPath())并不适用于所有路径! 路径仍然是 URL 编码的!)
new File(resource.getPath())
您需要指定从 /开始的路径
/
URL resource = YourClass.class.getResource("/abc"); Paths.get(resource.toURI()).toFile();
创建所需类的 classLoader 实例,然后就可以轻松访问文件或资源。 现在可以使用该类的 getPath()方法访问路径。
getPath()
ClassLoader classLoader = getClass().getClassLoader(); String path = classLoader.getResource("chromedriver.exe").getPath(); System.out.println(path);
返回文件或文件路径
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
在我们走向绝对道路的道路上有两个问题:
下面的代码将为我们提供所有有用的路径:
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,它可以通过静态或动态两种方式获得。
class
如果项目不在插件中,代码如果在 JUnit 中运行,将打印:
loaderDir = /C:.../ws/source.dir/target/test-classes/ localDir = /C:.../ws/source.dir/target/test-classes/package/
因此,要访问 src/rest/resources,我们应该上下访问文件树。这两种方法都可以使用。注意,我们不能使用 getResource(resourceFolderName),因为该文件夹不在目标文件夹中。我希望没有人把资源放在创建的文件夹中。
getResource(resourceFolderName)
如果类在插件中的包中,那么同一个测试的输出将是:
loaderDir = /C:.../ws/plugin/bin/ localDir = /C:.../ws/plugin/bin/package/
因此,我们应该再次上下文件夹树。
最有趣的是插件中的包是 发射的情况。作为 JUnit 插件测试,在我们的例子中。输出结果是:
loaderDir = /C:.../ws/plugin/ localDir = /package/
这里我们只能结合 都有函数的结果得到绝对路径。这还不够。在它们之间,我们应该放置类包所在位置的本地路径,相对于插件文件夹。也许,您必须在这里插入 src或 src/test/resource这样的内容。
src
src/test/resource
您可以将代码插入到您的代码中,并查看所拥有的路径。