J'utilise une application SpringBoot et ai introduit un bouton "J'aime" pour les images de chien affichées et sur chaque comme il va frapper le dessous @RequestMapping(value="likedDog")
je concatène le nécessaire informations avec un délimiteur.Comment écrire du contenu dans la ligne suivante d'un fichier? et trouver une chaîne dans un fichier et le remplacer à la même ligne exacte
Méthode A l'intérieur du contrôleur ci-dessous:
@RequestMapping(value = "likedDog")
public String likedDogList(@RequestParam("breedType") String breedType, @RequestParam("id") String id, Model model){
Long likes=0L;
String delimiter="_!_";
Dogs dogObject= dogsService.returnDogById(Long.valueOf(id));
if(dogObject.getLikes()==null){
likes=0L;
}
else{
likes=dogObject.getLikes();
}
likes=likes+1;//1,2
dogObject.setLikes(likes);//set 1,2
dogObject=dogsService.saveDog(dogObject);
model.addAttribute("dogObj",dogObject);
model.addAttribute("dogBreedType",breedType);
String content=id+delimiter+breedType+delimiter+dogObject.getImgURL()+delimiter+dogObject.getLikes();
String contentSub=id+delimiter+breedType+delimiter+dogObject.getImgURL();
try{
File file = new File("src/main/resources/data/DogLikes.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.newLine();
bw.flush(); // ORIGINAL
bw.close();
}
catch(Exception e){
System.out.println("Exception occured in likedDogList()");
e.printStackTrace();
}
return "liked";
}
Je veux écrire le « contenu » chaîne concaténée sur une nouvelle ligne dans le fichier respectif si aime appartiennent à des chiens, le code est illustré ci-dessous, même si Je présente bw.newLine
je ne peux pas l'écrire dans newline à la place il remplace simplement l'ancien contenu existant dans la première ligne du fichier.
Contenu dans le fichier DogLikes.txt ci-dessous:
17_!_Pug_!_http://i.imgur.com/E5vBM5Z.png_!_1 //but on every click the contents are being replaced in this first line only
Sortie prévue, le contenu à écrire dans DogLikes.txt sur tous Comme est indiqué ci-dessous:
17_!_Pug_!_http://i.imgur.com/E5vBM5Z.png_!_1
18_!_Pug_!_http://i.imgur.com/E5vBM5Z.png_!_1 //should be written like this in newline on like of dogId 18
19_!_Pug_!_http://i.imgur.com/E5vBM5Z.png_!_1 //should be written like this in newline on like of dogId 19
DEUXIÈME PROBLÈME: Aussi si je clique sur "J'aime" sur DogId 18 il devrait aller et remplacer la deuxième ligne comme suit,
17_!_Pug_!_http://i.imgur.com/E5vBM5Z.png_!_1
18_!_Pug_!_http://i.imgur.com/E5vBM5Z.png_!_2 //replacement of String in this exact location is expected
19_!_Pug_!_http://i.imgur.com/E5vBM5Z.png_!_1
Votre aide à ce sujet est très appréciable, Merci d'avance. Hey @daniel la méthode de sauvegarde a fonctionné pour écrire le contenu dans le fichier ligne par ligne pendant que j'utilise une approche différente pour la restauration. Cependant, je suis venu avec une nouvelle idée d'intégrer les deux goûts et aversions dans la même ligne comme indiqué ci-dessous:
Sortie prévue sur en cliquant sur « Like » et « Je n'aime »
1_!_Labrador_!_http://i.imgur.com/eE29vX4.png_!_like_!_11_!_dislike_!_5
2_!_Labrador_!_http://i.imgur.com/xX2AeDR.png_!_like_!_3_!_dislike_!_5
3_!_Labrador_!_http://i.imgur.com/hBFRUuW.png_!_like_!_1_!_dislike_!_5
16_!_Pug_!_http://i.imgur.com/E5vBM5Z.png_!_like_!_119_!_dislike_!_5
J'ai besoin un peu de votre aide Méthode backup() car j'ai essayé différentes combinaisons pour mettre à jour les likes et les aversions dans la même ligne, car votre approche met à jour de façon dynamique uniquement les likes. Aussi, je suis impatient de trier les images des chiens en fonction des préférences les plus élevées au plus bas. Nous vous remercions de votre aide à l'avance.
Il serait intéressant de savoir ce que vous voulez réaliser avec ce fichier. De plus avez-vous déjà envisagé d'utiliser un standard tel que csv ou xml au lieu d'un standard? En ce qui concerne votre deuxième problème: Pour remplacer le contenu, vous devez faire une boucle sur les lignes déjà existantes, trouver la correspondance, puis remplacer le nombre. Avec votre approche, vous ne faites qu'ajouter au fichier original. –
merci de répondre d'abord @DanielBubenheim. J'utilise une base de données en mémoire ici H2, elle ne conserve pas les données et perd toutes les données stockées lorsque l'application est déconnectée ou arrêtée. Donc, pour stocker les J'aime j'essaie de l'enregistrer dans un fichier txt. POUR LE DEUXIÈME PROBLÈME: oui j'ai fait usage de la boucle et j'ai essayé la méthode replace() puis j'ai utilisé bw.write (** texte remplacé **) mais il semble qu'il ait écrasé tout le contenu. votre solution serait utile ici. –
Ainsi, au lieu d'utiliser un stockage en mémoire, vous pouvez utiliser un stockage persistant à la place. Beaucoup plus sûr que d'écrire dans un fichier, n'est-ce pas? –