1
votes

Java crée plusieurs nouveaux fichiers

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 commentaires

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 un UUID


3 Réponses :


2
votes

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


0 commentaires

3
votes

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
    */
}


0 commentaires

2
votes

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é !


0 commentaires