我有一个程序,其中有一个截取屏幕截图的功能。代码完全按照预期执行,但每次拍摄新屏幕截图时,前一个屏幕截图都会被覆盖。我想知道是否有一种方法可以在每次拍摄新屏幕截图时使文件名不同。我的代码截图如下。
screenshot.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ev) {
try {
BufferedImage screenImage = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(screenImage, "png", new File("screenshots/screenshot.png"));
} catch (HeadlessException e) {
e.printStackTrace();
} catch (AWTException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
答案 0 :(得分:2)
可能会将数据/时间作为文件名的一部分附加。
或保留一个可用作顺序计数器的变量,并将计数器用作文件名的一部分。
答案 1 :(得分:0)
一种方法是将变量附加到文件名。在类中声明一个变量,并在每次截图时递增它。
public class MyClass {
int screenshotNumber = 0;
public void actionPerformed(ActionEvent ev) {
try {
BufferedImage screenImage = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(screenImage, "png", new File("screenshots/screenshot_" + screenshotNumber++ + ".png"));
} catch (HeadlessException e) {
e.printStackTrace();
} catch (AWTException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
然后你最终得到screenshot_0.png,screenshot_1.png等
答案 2 :(得分:0)
您有多种选择......
维护一个计数器,每次调用actionPerformed
时,递增计数器并将其用作屏幕截图文件名的一部分...
..., new File("screenshots/screenshot" + counter + ".png"));
列出具有匹配文件名的所有文件,并使用它来确定计数器值...
File[] files = new File("screenshots").listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().startsWith("screenshot");
}
});
int counter = files.length + 1;
当然,这并不排除文件存在同一计数的可能性......
列出snapshots
目录中的文件,按数字索引对它们进行排序,提取最后一个,提取计数器值并递增。
当然,这并不排除数字溢出的可能性......但如果您的目录中有很多图像,我会担心......