目前,我正在尝试使用Robot功能创建一个screencapture。现在我已经可以使用按钮进行截图并将其保存为图像形式。现在我想做同样的事情,但我想生成不同的文件名,如screenshot1.png,screenshot2.png。我可以知道如何使用for循环随机生成数字。
这是我目前的Java工作代码:
private void jbtnCaptureActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
Robot ro = new Robot();
BufferedImage capture = ro.createScreenCapture(screenRect);
File f;
f = new File("myimage1.jpg");
ImageIO.write(capture, "jpg", f);
System.out.println("Success");
} catch (Exception e){
System.out.println("Unable to capture the screen" + e);
}
}
有人可以帮我解决这个问题。提前谢谢。
答案 0 :(得分:2)
我猜每个屏幕截图都是通过某种按钮点击右键(而不是循环中的多次捕捉)触发的?
最直接的方法是将整数作为文件名的运行顺序:
private void jbtnCaptureActionPerformed(java.awt.event.ActionEvent evt) {
.....
File f = new File("myimage" + (this.filenameSeq++) + .jpg");
......
}
而且,如果您的捕获不是非常频繁地生成(例如每秒数百个文件),那么您可以采取另一种方法来避免保持正在运行的序列。您可以根据当前时间生成文件名,并检查文件是否存在。如果存在,请继续附加序列号,直到找到不存在的文件。在伪代码中:
String filenameBase = "myImage";
String currentTimestamp = new SimpleDateFormat("yyyymmddHHMMss").format(now());
File f = new File(filenameBase + currentTimestamp + ".png");
for (int i = 0; f.exists(); i++) {
f = new File(filenameBase + currentTimestamp + "-" + i + ".png");
}
// so here, you will have a filename which is not yet exists in your filessystem
答案 1 :(得分:0)
只需使用伪随机生成器:
Random rnd = new Random();
String filename = "screenshot" + rnd.nextInt() + ".png";
当然,在函数外部初始化伪随机生成器,并将其从一个屏幕截图保持到另一个屏幕截图。
答案 2 :(得分:0)
为什么不动态检查文件名[x] .jpg是否存在,增加数字直到没有该文件名存在。
public File getUniqueFile(String name) {
int i=1;
File file;
do {
file = new File(name + (i++) + ".jpg");
} while (file.exists());
return file;
}