2015-09-13 614 views
0

我已经创建了一个java自动化脚本,它在每个动作完成后都会获取屏幕截图并将其保存在一个目录中,但屏幕截图的名称是一个变量(它是我正在测试的链接的名称)。因此,截图可能已经存在于该目录中。Java:如果已经存在一个已存在文件的文件,如何复制文件中的文件

如果已经有一个名为xyz.png,我试图挽救具有相同名称的截图,我希望它被保存为XYZ文件(1)png格式而不是取代现有的XYZ .png

这里是我使用的脚本:

File scrFile = ((TakesScreenshot)cd).getScreenshotAs(OutputType.FILE); 

    FileUtils.copyFile(scrFile, new File("C:\\saved_screenshots\\"+ScreenshotName+".png")); 

回答

0

使用File.exists()检查,如果该名称的文件已经存在。

0

你可以这样说:

File destinationFile = new File("C:\\saved_screenshots\\"+ScreenshotName+".png");//Create the destination file 

//if the destination file already exists, add (1) to the end of the file name. Else copy the scrFile to destinationFile 
if(destinationFile.exists()){ 
    int count=1; 
    while(true){ 
     File tempFile = new File("C:\\saved_screenshots\\"+ScreenshotName+"("+count+").png"); 
     if(!tempFile.exists()){ 
      break; 
     }else{ 
      count++; 
     } 
    } 
    FileUtils.copyFile(scrFile, new File("C:\\saved_screenshots\\"+ScreenshotName+"("+count+").png")); 
}else{ 
    FileUtils.copyFile(scrFile, destinationFile)); 
} 
+0

这会失败的两个以上的文件具有相同的名称,因为你需要'(2)','(3)'等,等等...... – JVon

0

这应该把你在正确的轨道上:

File scrFile = ((TakesScreenshot) cd).getScreenshotAs(OutputType.FILE); 
String desiredName = "C:\\saved_screenshots\\" + ScreenshotName + ".png"; 
File dstFile = new File(desiredName); 
int i = 0; 
while (dstFile.exists()) { 
    i += 1; 
    desiredName = "C:\\saved_screenshots\\" + ScreenshotName + " (" + i + ").png"; 
    dstFile = new File(desiredName); 
} 
FileUtils.copyFile (scrFile, dstFile); 

基本上,如果一个文件存在,增加一个计数器(更改目标文件名称),直到名称可用。

+0

谢谢你们的响应。我试过的方法涉及检查首先存在一个文件,它起作用。 然后我意识到为什么不附加文件名的时间戳。所以使用内置函数 today = new Date(); –

相关问题