我正在尝试执行上述操作,但每次都会出现以下错误java.io.FileNotFoundException: file:\C:\Users\User\Desktop\Scrap\main\out\production\resources\ProfilePic\xas.png (The filename, directory name, or volume label syntax is incorrect)
以下是我用来做这个的功能
private URL url = this.getClass().getResource("/ProfilePic");
public final String PICTURE_DIRECTORY = url.toString();
public String createNewPicture (String path, String newPictureName) {
int width = 12;
int height = 12;
BufferedImage bf = null;
File f = null;
String dst = PICTURE_DIRECTORY +"/"+newPictureName+".png";
try{
f = new File("F://a.jpg");
bf = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
bf = ImageIO.read(f);
System.out.println("read file successfully");
} catch (Exception e) {
System.out.println(e.getMessage());
}
try {
dst = PICTURE_DIRECTORY +"/"+newPictureName+".png";
new File (PICTURE_DIRECTORY, newPictureName+".png");
f = new File(dst);
ImageIO.write(bf, "png", f);
//System.out.println("asaas " +dst);
}
catch (Exception e) {
System.out.println(e.getMessage());
}
return dst;
}
有人可以帮帮我吗?花了几个小时试图解决这个问题,但卡住了。谢谢!
答案 0 :(得分:0)
您需要的信息可在错误消息中找到:
java.io.FileNotFoundException: file:\C:\Users\User\Desktop\Scrap\main\out\production\resources\ProfilePic\xas.png (The filename, directory name, or volume label syntax is incorrect)
您的代码中存在问题:
private URL url = this.getClass().getResource("/ProfilePic");
public final String PICTURE_DIRECTORY = url.toString();
在您的案例中,网址包含协议"file"
。网址类' toString()
只返回完整的网址,包括协议。
您现在拥有包含PICTURE_DIRECTORY
的变量"file:/C:/..."
。这不是任何Windows操作系统上的有效路径。
如果你真的想写一个资源(不推荐),你可以这样做:
public final String PICTURE_DIRECTORY = toFile(url).getAbsolutePath();
static private File toFile(final URL url) {
try {
return new File(url.toURI());
}
catch (URISyntaxException e) {
throw new IllegalArgumentException(e);
}
}
但请注意,Class..getResource(..)
返回的资源并不总是文件。它也可以是JAR中的一个条目(您无法写入,与写入文件的方式相同)。
更好的方法可能是使用相对于用户主目录或其他已配置目录的目录。
最后,正如我在评论中提到的,使用ImageIO
复制(图像)文件通常是错误的解决方案。相反,请使用Files.copy(...)
,如Copying a File or Directory教程。