J'ai lu cette question ici Comment créer un fichier dans un répertoire en java?
J'ai une méthode qui crée un code QR. La méthode est appelée plusieurs fois, dépend de l'entrée de l'utilisateur.
Ceci est un extrait de code:
if (!myFile.exists()) { try { myFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } }
Le problème: Si l'utilisateur tape "2" alors cette méthode sera déclenchée deux fois. En conséquence, le premier fichier qrCODE.png sera remplacé par le deuxième qrCODE.png, donc le premier est perdu.
Comment puis-je générer plus d'un code qr avec des noms différents, comme qrCODE. png et qrCODE (2) .png
Mon idée:
String filePath = "/Users/Test/qrCODE.png"; int size = 250; //tbd String fileType = "png"; File myFile = new File(filePath);
Des conseils?
EDIT: Je l'ai résolu en utilisant une boucle for et en incrémentant le nombre dans le nom de fichier à chaque étape de la boucle.
3 Réponses :
Vous pouvez vérifier le répertoire / Users / Test
avant de créer le fichier.
String dir = "/Users/Test"; String pngFileName = "qrCode"; long count = Files.list(Paths.get(dir)) // get all files from dir .filter(path -> path.getFileName().toString().startsWith(pngFileName)) // check how many starts with "qrCode" .count(); pngFileName = pngFileName + "(" + count + ")";
Vous pouvez créer plus de fichiers, par exemple. comme suit
{...} if(!myFile.exists()){ //file creation myFile.createNewFile() }else{ //file already exists } {...}
Btw pour ajouter vérifier si le fichier existe est également un bon point.
int totalCount = 0; //userinput String filePath = "/Users/Test/"; String fileName= "qrCODE"; String fileType = "png"; for(int counter = 0; counter < totalCount; counter++){ int size = 250; //tbd File myFile = new File(filePath+fileName+counter+"."+fileType); /* will result into files qrCODE0.png, qrCODE1.png, etc.. created at the given location */ }
Votre idée de résoudre le problème est bonne. Mon conseil est de diviser la variable filePath
en quelques variables afin de manipuler le nom du fichier plus facilement. Vous pouvez ensuite introduire une variable fileCounter
qui stockera le nombre de fichiers créés et utilisera cette variable pour manipuler le nom du fichier.
if(myFile.exists()){ filePath = basePath + fileName + "(" + ++fileCounter + ")" + fileType; myFile = new File(filePath); } createFile(myFile);
Vous pouvez alors vérifier si le fichier existe et si tel est le cas, donnez simplement une nouvelle valeur à la variable filePath
puis créez le nouveau fichier
int fileCounter = 1; String basePath = "/Users/Test/"; String fileName = "qrCODE"; String fileType = ".png"; String filePath = basePath + fileName + fileType; File myFile = new File(filePath);
Et vous avez terminé !
Pourquoi ne pas tester la présence du fichier avant de l'enregistrer, et s'il existe de manière récursive, essayez avec filename + (2)?
File.createTempFile ("qrCODE", ".png", new File ("/ Users / Test"));
Peut-être utiliser l'horodatage dans le nom du fichier:
System.currentMillis ()
ou utiliser unUUID