保存BufferedImages将图像保存到Java Eclipse工作区而不是保存到C驱动器

时间:2013-06-09 03:01:25

标签: java save bufferedimage javax.imageio

我遇到了使用简单的绘图程序保存BufferedImage的问题。当我从油漆中保存图像时,例如我之前绘制的蛇图片,它可以保存图像,但不会以您想象的方式保存图像。它不是将图像保存到C:\驱动器(或用户可能使用的任何驱动器),而是将图像保存到eclipse工作区。这当然是不可接受的,因为这需要直接提供给用户的主要访问地点。以下是用于保存bufferedimage的方法。

static void saveImage() {
        try {
            ImageIO.write(background, "png",
                    new File(fileName + ".png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

所以在这里,背景显然是保存的图像,png是扩展名,而fileName是使用先前方法保存的字符串,这在此处并不重要。此方法将图像保存到 eclipse工作区。这很糟糕。我们需要将其保存到默认驱动器。我该如何做到这一点?如果您需要其他任何东西来帮助您解答,请告诉我。

编辑:因此,根据要求,这是更改fileName的代码。它完全属于不同的UI,因为我不确定要发布多少,我将发布actionListener和getName()方法。这里发生的是有一个JTextField,一旦按下JButton,就会从中提取字符串并将其用作fileName。这是代码:

`finishButton.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent e) {
                   ProgramUI.fileName = getName();
                   ProgramUI.fileHasName = true;
                   ProgramUI.saveImage();
                   frame.dispose();
               }
        });
    }

    public String getName() {
        return nameField.getText();
    }
`

3 个答案:

答案 0 :(得分:4)

为用户提供JFileChooser(如this answer所示),以允许他们导航到路径并选择名称。

使用FileSystemView here限制路径。

答案 1 :(得分:2)

如果该代码保存到Eclipse工作区,那是因为:

  1. 您要在filename,AND
  2. 中提供相对路径名
  3. 当您从Eclipse中运行应用程序时,当前目录是Eclipse工作区目录。
  4. 尝试从命令提示符运行命令。使用相同的输入(即与您当前使用的文件名相同),它应保存到当前目录。


    无法为您提供解决此问题的简单方法。正确的解决方案取决于您希望程序实际工作的方式:

    • 您希望保存文件的位置(即在哪个目录中)。
    • 是否(以及如何)希望用户能够说出保存文件的位置。
    • 此应用程序是否需要便携;即在除Windows之外的其他工作。

    我建议您首先阅读"当前目录"的概念,然后阅读java.io.File类的javadoc ...这将解释Java如何决定您的文件"平均"当你试图打开它时。

答案 2 :(得分:2)

在创建File对象时,您没有给出保存文件的路径。默认情况下,它会将文件保存在当前工作目录中。

试试这个:

static void saveImage() {
        try {
            ImageIO.write(background, "png",
                    new File("C:\\" + fileName + ".png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

或者更好地为方法添加路径参数:

static void saveImage(String filePath) {
        try {
            ImageIO.write(background, "png",
                    new File(filePath + fileName + ".png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

但请确保使用正确的斜杠(//)

获取路径