通常情况下,我们会将跟项目有关的配置文件和静态资源放在resources目录下,在需要时进行调用。
在windows系统下,我们利用BufferedImage实现图片的读取有多种方法,例如:
第一种:
String path = this.getClass().getClassLoader().getResource("picture.jpg").getPath();
File file = new File(path);
BufferedImage labelPic = null;
try {
labelPic = ImageIO.read(file);
} catch (IOException e) {
throw new RuntimeException(e);
}
第二种:针对在resources目录下的文件
ClassPathResource resource = new ClassPathResource("picture.jpg");
File file = null;
try {
file = resource.getFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
BufferedImage labelPic = null;
try {
labelPic = ImageIO.read(file);
} catch (IOException e) {
throw new RuntimeException(e);
}
第三种:针对在resources目录下的文件(以流的形式)
ClassPathResource resource = new ClassPathResource("picture.jpg");
InputStream is = null;
try {
is = resource.getInputStream();
} catch (IOException e) {
throw new RuntimeException(e);
}
BufferedImage labelPic = null;
try {
labelPic = ImageIO.read(is);
} catch (IOException e) {
throw new RuntimeException(e);
}
但是,在上传到服务器后,即在linux系统下代码在读取文件路径从而获取图片时,使用前两种方法都会出现报错:Can‘t read input file! 即无法成功读取文件。经测试此时 使用第三种方法,即使用InputStream 才可在项目上传到服务器后对资源实现读取操作。