无法使用classLoader.getResource(fileName)获取文件.getFile()

时间:2016-05-01 13:06:53

标签: java eclipse maven

我在eclipse中创建了一个maven web-app项目,它在我制作它的机器上运行良好。但是当在eclipse中将这个项目导入到其他机器时,它会在获取文件时给出这个异常:

  

异常:d:\的Eclipse%20Workspace.metadata.plugins \ org.eclipse.wst.server.core \ TMP0 \ wtpwebapps \示例\ WEB-INF \类\ file.txt的   (系统找不到指定的路径)

我正在使用此代码获取文件:

public File getFile (String fileName) {
    //Get file from resources folder
    ClassLoader classLoader = getClass().getClassLoader();
    File file = new File(classLoader.getResource(fileName).getFile());
    return file;
}

该文件位于项目的资源文件夹中:

  

D:\ Eclipse Workspace \ Sentiment Analysis \ example \ src \ main \ resources

我走了显示异常消息的路径,发现文件已经存在。

2 个答案:

答案 0 :(得分:1)

网址getFile方法不会将网址转换为文件。它只返回主机和端口之后的URL部分。 URL需要以百分比形式转义大量字符,包括空格,因此您无法可靠地将URL的路径部分用作文件名。实际上,异常正好告诉您:您的计算机上没有名为D:\Eclipse%20Workspace.metadata.plugins的目录。 (来吧检查。)

如果您有网址,则不应尝试将其转换为文件。你不需要。您可以使用URL的openStream method从文件中轻松读取URL。

但即使这样也没有必要,因为您也可以使用getResourceAsStream方法完全跳过URL并获得可读的InputStream:

InputStream stream = getClass().getResourceAsStream("/file.txt");

答案 1 :(得分:0)

代码在此代码类驻留的同一目录中查找该文件。这段代码的包结构是什么? 此外,只有Maven将资源复制到类路径中。因此,如果使用Eclipse进行编译和运行,则不会自动复制resources文件夹。