无法使用JFileDialog加载图像

时间:2018-08-24 11:38:00

标签: java swing

最初使用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);

它似乎没有获取文件。请问我在做什么错了?

1 个答案:

答案 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存储到路径。