【问题标题】:URI scheme is not "file". Unable to read file from classpathURI 方案不是“文件”。无法从类路径读取文件
【发布时间】:2012-05-12 19:58:00
【问题描述】:

我有 Java webapp,我正在尝试从 classpth 读取文件。

 if (fileName == null){
        fileName = Thread.currentThread().getContextClassLoader().getResource("config.properties");
    }
objFile = new File(fileName.toURI());

我的类路径中有 config.properties。 WEB-INF/类。当我在本地检查时,它给出:fileName.toURI(),它给了我file:/D:/dev/Tomcat_6_0/webapps/testApp/WEB-INF/classes/config.properties。并且工作正常。

问题出在生产 linux 服务器上,我在此路径 vfsfile:/export/home/u/bin/jboss-5.1.0.BE/server/default/deploy/testApp.war/WEB-INF/classes/config.properties

我得到以下异常。

Caused by: java.lang.IllegalArgumentException: URI scheme is not "file"
    at java.io.File.<init>(File.java:366)
    at com.utils.ConfigLoader.loadConfigFilePath(ConfigLoader.java:87)

处理 vfs 的解决方法是什么?

【问题讨论】:

    标签: java java-io file-handling vfs


    【解决方案1】:

    您不得尝试将资源从类路径转换为文件。如果它在 WAR/JAR 中,它甚至可能不是文件。 File 类仅代表文件系统对象。

    【讨论】:

    • 是的,它在我的战争中。如果我在 File 构造函数中将字符串 vfsfile:/ 更改为 file:/ 会好吗?
    • 没有。如果它不是磁盘上的文件——它不是——那么File 不能代表它。
    【解决方案2】:

    既然您正在加载资源(它们可能是文件,也可能不是文件,想象一下这个属性文件打包到 jar/war 中),为什么不在 URL 对象上使用 openStream() 呢?然后只需从返回的 BufferedStream 中读取内容即可!

    【讨论】:

      猜你喜欢
      • 2012-08-15
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多