最初使用jfilechooser将jpg文件上载到项目中,但是切换到jFileDialog,因为我想以缩略图视图获取图像。但是当我运行项目时,出现此错误消息:
javax.imageio.IIOException:Cant read input file!
这是下面的代码:
FileDialog fd = new FileDialog(this,"Choose a File",FileDialog.LOAD);
fd.setDirectory("C:\\");
fd.setFile("*.jpg;*.jpeg");
fd.setVisible(true);
filename = fd.getFile();
if(filename==null){
}else{
try{
File imgs =new File(filename);
BufferedImage bufferedimage=ImageIO.read(imgs);
BufferedImage thumbnail=Thumbnails.of(bufferedimage)
.size(145, 141)
.asBufferedImage();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(thumbnail,"jpeg", os);
InputStream is=new ByteArrayInputStream(os.toByteArray());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf =new byte[1024];
try{
for(int readNum; (readNum=is.read(buf))!=-1;){
bos.write(buf,0,readNum);
System.out.println("Read" +readNum+ "bytes,");
}
}catch(IOException ex){
Logger.getLogger(null);
}
person_image=bos.toByteArray();
}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}finally{
try{
rs.close();
pst.close();
}
catch(Exception e){
}
}
我认为问题出在以下部分:
File imgs =new File(filename);
BufferedImage bufferedimage=ImageIO.read(imgs);
它似乎没有获取文件。请问我在做什么错了?
答案 0 :(得分:1)
我刚刚对其进行了测试,方法FileDialog.getFile仅返回文件名,而不是完整路径!要获取目录,必须调用FileDialog.getDirectory
解决此问题的最简单方法是简单地将目录和文件连接起来。
filename = fd.getDirectory() + File.seperator + fd.getFile();
我不确定您是否需要File.seperator,因为fd.getDirectory可能已经在文件末尾添加了文件分隔符,并且您获得了多个分隔符。
要解决此问题,请使用:
filename = new File(new File(fd.getDirectory()), fd.getFile()).getPath();
或者只是直接存储文件而不以.getPath结尾,并且不将String存储到路径。