我遇到了使用简单的绘图程序保存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();
}
`
答案 0 :(得分:4)
答案 1 :(得分:2)
如果该代码保存到Eclipse工作区,那是因为:
filename
,AND 尝试从命令提示符运行命令。使用相同的输入(即与您当前使用的文件名相同),它应保存到当前目录。
无法为您提供解决此问题的简单方法。正确的解决方案取决于您希望程序实际工作的方式:
我建议您首先阅读"当前目录"的概念,然后阅读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();
}
}
但请确保使用正确的斜杠(//)
获取路径