没有获得资源的绝对文件路径

时间:2014-03-21 18:49:47

标签: java netbeans deployment jboss war

我在/ 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();

我不断得到这个结果。

3 个答案:

答案 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