Java:为Robot screencapture生成随机文件名

时间:2016-05-17 02:59:34

标签: java

目前,我正在尝试使用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);
        }

}

有人可以帮我解决这个问题。提前谢谢。

3 个答案:

答案 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;
}