2016-05-17 195 views
0

目前,我正在嘗試使用Robot功能創建screencapture。現在我已經可以使用按鈕進行截圖並將其保存爲圖像形式。現在我想要做同樣的事情,但我想生成不同的文件名,例如screenshot1.png,screenshot2.png。我可以知道如何使用for循環隨機生成數字。Java:爲機器人screencapture生成隨機文件名

這是我當前的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); 
     } 

} 

有人可以幫助我在此。提前致謝。

+1

爲什麼你想讓它是「隨機的」?隨機意味着你無法通過文件名告訴屏幕截圖的順序,隨機也意味着你可能有重複的文件名 –

+0

所以有沒有更好的方法來做到這一點@AdrianShum?因爲我需要顯示多個圖像用於comapring的目的。 – anonymous5671

+1

難道你不能只在應用程序中保留一個正在運行的序列號嗎? –

回答

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 
+0

它顯示'無法格式化給定的對象作爲日期' – anonymous5671

+1

我說它是僞代碼!它只是給你的想法,而不是瞄準你複製和粘貼! –

0

只需使用一個僞隨機生成:

Random rnd = new Random(); 
String filename = "screenshot" + rnd.nextInt() + ".png"; 

當然,初始化函數外的僞隨機生成,並保持它從一個屏幕截圖到另一個。

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; 
} 
+0

沒有注意到阿德里安給出了同樣的答案 – slipperyseal