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

标签 java eclipse maven

我在 eclipse 中创建了一个 Maven Web 应用程序项目,它在我制作此项目的机器上运行良好。但是当在 Eclipse 中将此项目导入到其他机器时,它在获取文件时给了我这个异常:

exception:D:\Eclipse%20Workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\example\WEB-INF\classes\file.txt (The system cannot find the path specified)

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

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

我进入异常消息显示的路径,发现该文件已经在那里。

最佳答案

URL 的 getFile 方法不会将 URL 转换为文件。它仅返回主机和端口之后的 URL 部分。 URL 需要对许多字符(包括空格)进行百分比转义,因此您无法可靠地使用 URL 的路径部分作为文件名。事实上,异常正在准确地告诉您:您的计算机上没有名为 D:\Eclipse%20Workspace.metadata.plugins 的目录。 (继续检查。)

当您拥有 URL 时,您根本不应该尝试将其转换为文件。你不需要。您可以像使用 openStream method 从文件中一样轻松地从 URL 中读取数据。网址。

但即使这样也不是必需的,因为您还可以使用 getResourceAsStream 方法完全跳过 URL 并获取可读的 InputStream:

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

关于java - 无法使用 classLoader.getResource(fileName).getFile() 获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36967014/

相关文章:

java - 如何以编程方式使用 Maven 下载 jar

java - Eclipse Maven 从类中查找依赖项

java - 如何从库中检测应用程序已暂停(未终止)和已恢复(未创建)

java - 哪个 API : JavaFX or JMF is better for audio processing in Java?

java - 支持 Cloud Bigtable 作为 Cloud Dataflow 中的接收器

java - 使用 Java 的操作系统事件处理程序

java - Eclipse:保存时导出 .JAR

java - 如何做一个自定义的 JoptionPane

java - Eclipse 的 blackberry java 插件的编译问题

java - 如何通过 rpm-maven-plugin 使用运行时环境变量