Java:替换新文件

时间:2014-03-17 21:45:09

标签: java

我使用BufferedImage在面板上绘制图像,现在我想导出该图像。

但是如何检测新文件是否已创建或替换旧文件?现在我的输出是:

old filename: image.jpeg

new filename: image.jpeg.jpeg

我该怎么办?我使用createNewFile方法在创建文件后放置了检测代码,但它似乎无法工作:(

这是进行保存的模式,用户可以选择各种类型的图像(bmp,jpeg ...): imageFileFile

private void saveImage(){
        JFileChooser savefile = new JFileChooser("~/");
        savefile.setFileSelectionMode(JFileChooser.FILES_ONLY);//Chose file only
        savefile.setFileFilter(new pngSaveFilter());//Save in PNG format
        savefile.addChoosableFileFilter(new jpegSaveFilter());//Save in JPEG format
        savefile.addChoosableFileFilter(new bmpSaveFilter());//Save in BMP format
        savefile.addChoosableFileFilter(new gifSaveFilter());//Save in GIF format
        savefile.setAcceptAllFileFilterUsed(false);
        int returnVal = savefile.showSaveDialog(null);//Show save dialog
        String EXT="";
        String extension="";
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            imageFile = savefile.getSelectedFile();
            extension = savefile.getFileFilter().getDescription();
            if (extension.equals("JPEG file images *.jpeg,*.JPEG")) {
                EXT = "JPEG";
                imageFile = new File(imageFile.getAbsolutePath() + ".jpeg");
            }
            if (extension.equals("PNG file images *.png,*.PNG")) {
                EXT = "PNG";
                imageFile = new File(imageFile.getAbsolutePath() + ".png");
            }
            if (extension.equals("Bitmap file images *.bmp,*.BMP")) {
                EXT = "BMP";
                imageFile = new File(imageFile.getAbsolutePath() + ".bmp");
            }
            if (extension.equals("GIF file images *.gif,*.GIF")) {
                EXT = "GIF";
                imageFile = new File(imageFile.getAbsolutePath() + ".gif");
            }
            try {
                if(imageFile != null){
                    topViewImagePanel.drawToSave();
                    System.out.println(imageFile.createNewFile());
                    //ImageIO.write(topViewImagePanel.getSavingImage(), EXT, imageFile);
                  // the code detection is below
                    if (imageFile.createNewFile()){
                        int value = JOptionPane.showConfirmDialog(null, "Image existed! Replace?", "Warning!", JOptionPane.YES_NO_OPTION);
                        if (value == JOptionPane.YES_OPTION){
                            imageFile.delete();
                            ImageIO.write(topViewImagePanel.getSavingImage(), EXT, imageFile);
                        }else if (value == JOptionPane.NO_OPTION){

                        }
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

3 个答案:

答案 0 :(得分:2)

if(imageFile.exists())

进行简单的检查以查看文件是否已存在。

答案 1 :(得分:1)

请勿手动将文件扩展名附加到文件名 它已经存在于绝对路径中。

要处理已存在的文件,请使用

的else子句
if (imageFile.createNewFile())

希望这有帮助。

答案 2 :(得分:0)

如果您使用Java 7,请使用新API:

if (imageFile != null) {
    final Path path = imageFile.toPath();
    if (Files.exists(path)) {
        int value = JOptionPane.showConfirmDialog(null,
            "Image existed! Replace?", "Warning!", JOptionPane.YES_NO_OPTION);
             if (value == JOptionPane.YES_OPTION)
                 Files.delete(path);
    }
    ImageIO.write(topViewImagePanel.getSavingImage(), EXT,
        Files.newOutputStream(path));
}

另外,关于你原来的问题:

  

我使用createNewFile方法在创建文件后放置了一个检测代码,但它似乎不起作用:(

这是正常的,您拨打.createNewFile() 两次

System.out.println(imageFile.createNewFile()); // <-- CALL 1
//ImageIO.write(topViewImagePanel.getSavingImage(), EXT, imageFile);
// the code detection is below
if (imageFile.createNewFile()){ // <-- CALL 2

它将永远失败第二次!