Bonjour à tous,
J'ai vraiment du mal sur ce coup là.
En gros je veux modifier un fichier texte.
Donc je l'ouvre et je le lit ligne par ligne.
Chaque ligne lue est modifiée, et écrite dans un nouveau fichier texte.
Je me retrouve donc avec mon fichier d'origine qui a juste été lu, et avec un nouveau fichier dont le contenu est différent du premier.
A ce niveau là, le but est de supprimer le fichier d'origine puis de renommer le nouveau avec le nom du premier.
Et c'est la suppression qui bloque. J'ai l'impression que lorsque j'ouvre le fichier d'origine pour le lire, Windows crée un processus qui ne se fermera pas ensuite, m’empêchant ainsi de le supprimer.
J'imagine que je dois mal fermé mes bufferedReaders ou autres...
Et ça n'est pas systématique! Parfois il suffit d'attendre assez longtemps pour que la suppression se fasse, mais ça ralenti mon appli méchamment.
Voici mon code bien simplifié:
Où ai-je foiré?
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 private void ecrireInformations(String fichier) throws IOException { FileWriter writer = null; BufferedWriter output = null; BufferedReader reader = null; try { File fic = new File(fichier); FileInputStream fis = new FileInputStream(fichier); InputStreamReader isr = new InputStreamReader(fis); reader = new BufferedReader(isr); writer = new FileWriter("." + File.separator + name, true); output = new BufferedWriter(writer); while (reader.ready()) { String line = reader.readLine(); output.newLine(); output.write(line + " exemple"); } fis.close(); isr.close(); reader.close(); output.flush(); output.close(); writer.close(); //C'est là que ça mouline tant que le fichier n'est pas débloqué. while (fic.exists()) { secureDelete(fic); } File source = new File("." + File.separator + name); source.renameTo(fic); } catch (FileNotFoundException e) { e.printStackTrace(); } } public static void secureDelete(File file) throws IOException { if (file.exists()) { long length = file.length(); SecureRandom random = new SecureRandom(); RandomAccessFile raf = new RandomAccessFile(file, "rws"); raf.seek(0); raf.getFilePointer(); byte[] data = new byte[64]; int pos = 0; while (pos < length) { random.nextBytes(data); raf.write(data); pos += data.length; } raf.close(); file.delete(); } }
Merci d'avance!
Partager