如何从classpath创建文件

时间:2015-08-20 13:37:06

标签: java file classpath

我正在尝试创建一个新文件:

project/src/resources/image.jpg

如下:

URL url = getClass().getResource("src/image.jpg");
File file = new File(url.getPath());

但我收到错误:

java.io.FileNotFoundException: file:\D:\project\dist\run560971012\project.jar!\image.jpg (The filename, directory name, or volume label syntax is incorrect)

我做错了什么?

更新:

我正在尝试从中创建一个MultipartFile:

FileInputStream input = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "image/jpeg", IOUtils.toByteArray(input));

2 个答案:

答案 0 :(得分:2)

您没有将图像数据传递给文件!!你试图在图像的路径中写一个空文件!!

我会推荐我们的Apache好友FileUtils库(getting classpath as this answer):

import org.apache.commons.io.FileUtils

URL url = getClass().getResource("src/image.jpg");
final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
FileUtils.copyURLToFile(url, f);

此方法会下载url,并将其保存到文件f

答案 1 :(得分:2)

你的问题是" image.jpg"是您项目的资源。 因此,它嵌入在JAR文件中。你可以在异常消息中看到它:

文件:\ D:\ project \ dist \ run560971012 \ project.jar! \ image.jpg

您无法将JAR文件中的文件作为常规文件打开。 要阅读此文件,您必须使用getResourceAsStream(详见本this SO question)。

祝你好运