Bonjour,

tout d'abord, il me faut dire que le code suivant ne se lance pas depuis la machine sur lequel il travaille (d'où la présence de l'ip).


Je vous explique ce que fais le code.

Il va chercher un fichier sur le serveur.
Il le recopie en modifiant une ligne.

Cette partie est OK.

Par la suite, je voudrais effacer l'ancienne version du fichier.

Sauf que delete me renvoie false à ce moment là; et il me semble bien avoir fermé toutes les entrées, ce que ce soit en lecture et écriture.

Par la suite, je veux simplement renommer le nouveaux fichier comme l'ancien (ce qui marche je pense mais échoue pour le moment comme le fichier n'est pas supprimé).


Voici le code: (en vert la partie fonctionnelle; et en rouge ce qui pose problème)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
	//Return the old UU 
	public String modifGrfiti(String ip,Settings set,FTextArea test){
		String pathGrfiti="\\\\"+ip+"\\\\"+set.getpathGrfiti();
		String newPath="\\\\"+ip+"\\\\"+set.getrepGrfiti()+"\\GrfItiServerV2bis.xml";
		String UU="notFound";
		File grfiti=new File(pathGrfiti);
		if(grfiti.exists()){
			BufferedReader lecteurAvecBuffer = null;
		    String line;
		    
		    try{
		    	lecteurAvecBuffer = new BufferedReader(new FileReader(grfiti.getPath()));
		    	//create the newFile
		    	BufferedWriter writer = new BufferedWriter(new FileWriter(new File(newPath)));
		    	//open writting file mode
		    	FileWriter fw= new FileWriter(newPath,true);
				while ((line = lecteurAvecBuffer.readLine()) != null){
					//Read the file line by line
					if(line.contains("<GraphTC>")){
						String newLine="<GraphTC>"+set.getdestGraph()+"\\geocati_"+this.getNumUU()+"</GraphTC>\n";
						fw.write(newLine);
						UU=line.substring(line.lastIndexOf("_")+1,line.lastIndexOf("_")+6);
					}else{
						fw.write(line+"\n");
					}
				}
				lecteurAvecBuffer.close();
				fw.close();
				writer.close();
				//V2vis is the new File so delete old one
				if(grfiti.delete()){
					System.out.println("Ancien Grfiti supprimé OK\n");
					test.addext("Ancien Grfiti supprimé OK\n");
				}else{
					System.out.println("Echec suppression ancien Grfiti");
					test.addext("Echec suppression ancien Grfiti\n");
				}
				//V2 is destroyed; now change V2bis into V2
				String com= "ren "+newPath+ " GrfItiServerV2.xml";
				Launch testCom=new Launch(com,test);
				//back the new Grfiti
				testCom.exe();
		    }catch (IOException e ) {
				// TODO Auto-generated catch block
		    	System.out.println("Echec de traitement du fichier\n");
				e.printStackTrace();
			}
		}else{
			System.out.println("Le fichier "+pathGrfiti+" n'existe pas !");
			test.addext("Le fichier "+pathGrfiti+" n'as pas été trouvé !");
		}
		return UU;
	}
Il y a bien un fichier ouvert localement en écriture pendant que cette fonction travaille, mais normalement ça ne devrait pas poser de problèmes...