我在/ src / main / resources下有一个模板文件,我想得到它的绝对路径,问题是我得到的是相对路径,而不是绝对路径。
在项目中加载模板后,我需要在计算机中获取文件的绝对路径。我现在正在做的是:
URL location = this.getClass().getResource("/template/template2.vm");
String fullPath = location.getPath();
返回: (java.lang.String)vfs:/content/MyProyect-1.0.0-SNAPSHOT.war/WEB-INF/classes/templates/template2.vm
如果在Eclipse中执行此操作,则会提供完整路径,但在Netbeans中部署并且没有IDE会返回此结果。我正在使用jboss进行部署。
我也尝试过做
String fullPath = location.getAbsolutePath();
我不断得到这个结果。
答案 0 :(得分:2)
JBoss正在使用前面所述的虚拟文件系统(VFS)。您可以使用jboss特定库jboss-vfs获取文件的绝对路径。
URL rootUrl = classLoader.getResource(path);
VirtualFile jbossVirtualFile = (VirtualFile) rootUrl.getContent();
File fileSystemFile = jbossVirtualFile.getPhysicalFile();
String absolutePathToFile = fileSystemFile.getPath();
这里我使用的是jboss-vfs 3.2.4.Final。
或者,如果您需要阅读文件而不关心路径使用
classLoader.getResourceAsStream(path)
(这不适用于dirs。)
答案 1 :(得分:0)
这总是本地的吗?如果是这样,你可以这样做:
URL location = this.getClass().getResource(/template/template2.vm);
File f = new File(location.toUri());
String fullPath = f.getAbsolutePath();
答案 2 :(得分:0)
我认为这是不可能的。 JBoss使用不同的系统来存储已部署的文件。 vfs就是其中之一。几个月前我遇到了同样的问题,即使经过大量研究,也无法解决问题。我最终在启动指向我需要的目录的jboss时添加了一个环境变量(我需要加载一个.properties文件,它在部署之外)。见这里:https://community.jboss.org/wiki/PropertiesService