假设标准maven设置。
在资源文件夹中说您有一个文件abc
。
在Java中,我如何获得文件的绝对路径?
答案 0 :(得分:141)
实际运作的正确方法:
URL resource = YourClass.class.getResource("abc");
Paths.get(resource.toURI()).toFile();
现在,类路径中的文件在物理上的位置并不重要,只要资源实际上是文件而不是JAR条目,就会找到它。
(看似明显的new File(resource.getPath())
不适用于所有路径!路径仍然是URL编码的!)
答案 1 :(得分:33)
您可以使用ClassLoader.getResource
方法获取正确的资源。
URL res = getClass().getClassLoader().getResource("abc.txt");
File file = Paths.get(res.toURI()).toFile();
String absolutePath = file.getAbsolutePath();
OR
虽然这可能不会一直有效,但更简单的解决方案 -
您可以创建File
对象并使用getAbsolutePath
方法:
File file = new File("resources/abc.txt");
String absolutePath = file.getAbsolutePath();
答案 2 :(得分:19)
您必须指定从/
URL resource = YourClass.class.getResource("/abc");
Paths.get(resource.toURI()).toFile();
答案 3 :(得分:10)
创建所需类的classLoader实例,然后您可以轻松访问这些文件或资源。
现在,您使用该类的getPath()
方法访问路径。
ClassLoader classLoader = getClass().getClassLoader();
String path = classLoader.getResource("chromedriver.exe").getPath();
System.out.println(path);
答案 4 :(得分:0)
返回文件或文件路径
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
答案 5 :(得分:0)
通往绝对路径的过程中存在两个问题:
以下代码将为我们提供所有有用的路径:
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/
因此,要访问src / rest / resources,我们应该在文件树中上下移动。两种方法都可以使用。注意,我们不能使用getResource(resourceFolderName)
,因为该文件夹不在目标文件夹中。希望没有人将资源放在创建的文件夹中。
如果该类在插件的包中,则相同测试的输出将是:
loaderDir = /C:.../ws/plugin/bin/
localDir = /C:.../ws/plugin/bin/package/
因此,我们还是应该在文件夹树中上下移动。
最有趣的是在插件中启动软件包时的情况。以JUnit插件测试为例。输出为:
loaderDir = /C:.../ws/plugin/
localDir = /package/
在这里,我们仅将两个函数的结果结合起来就可以获得绝对路径。这还不够。在它们之间,我们应该放置类包所在位置的本地路径,相对于plugin文件夹。可能您需要在此处插入src
或src/test/resource
之类的内容。
您可以将代码插入您的代码中,并查看您拥有的路径。