2015-09-13 7 views
0

J'ai créé un script d'automation en Java qui prend une capture d'écran après chaque action et l'enregistre dans un répertoire, mais le nom de la capture d'écran est une variable (c'est le nom du lien que je suis en train de tester). Ainsi, il est possible que la capture d'écran existe déjà dans ce répertoire.Java: Comment copier un fichier dans un répertoire s'il existe déjà un fichier avec le même nom

S'il existe déjà un fichier nommé xyz.png et je suis en train d'enregistrer une capture d'écran avec le même nom que je veux qu'il soit enregistré en tant que xyz (1) .png et non remplacer le xyz existant .png.

Voici le script que je me sers:

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

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

Répondre

0

utilisation File.exists() pour vérifier si le fichier de ce nom existe déjà.

0

Vous pouvez le faire comme ceci:

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

Cela échouerait pour plus de deux fichiers avec le même nom, comme vous auriez besoin '(2)', '(3)', etc ... – JVon

0

Cela devrait vous mettre sur la bonne voie:

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); 

Fondamentalement, si un fichier existe, augmenter un compteur (qui modifie le fichier de destination name) jusqu'à ce que le nom soit disponible.

+0

Merci les gars pour la réponse.J'ai essayé l'approche qui implique de vérifier l'existence d'un fichier d'abord, cela a fonctionné. Ensuite, j'ai réalisé pourquoi ne pas attacher un horodatage avec le nom du fichier.So utilisé la fonction intégrée aujourd'hui = new Date(); –