Bonjour,
J'ai un petit problème, j'ai un code qui fait un copier coller d'un fichier, le voici:
Comme vous le voyez, le nom du fichier à copier est envoyé par un autre programme, jusque là tout va bien, le fichier à copier est envoyé via les socket et reçu de l'autre côté avec ce code:
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 import java.net.*; import java.io.*; public class clientcopie implements Runnable { Socket client; String chemin; public clientcopie(Socket client, String chemin) { this.client = client; this.chemin = chemin; } @Override public void run() { // TODO Auto-generated method stub byte tab[] = new byte[1024]; File fichier = new File(chemin); try { FileInputStream reader = new FileInputStream(fichier); int nbreoctet = 0; System.out.println(chemin); while(true) { nbreoctet = reader.read(tab); if(nbreoctet == -1) break; client.getOutputStream().write(tab, 0, nbreoctet); client.getOutputStream().flush(); tab = new byte[1024]; } reader.close(); }catch(Exception e) { e.printStackTrace(); } } }
Jusque là pas de problème, sauf que lorsque je veux lancer le fichier copié, je ne peux pas, il me dit que c'est utilisé par un autre programme.
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 import java.io.*; import java.net.*; import java.awt.image.*; import javax.imageio.*; import javax.swing.*; public class captureserveur implements Runnable { Socket client; File fichier; public captureserveur(Socket client) { this.client = client; } @Override public void run() { // TODO Auto-generated method stub String nom = "capture"; fichier = new File("capture"); try { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); //initialisation de la copie cote client writer.write("/capture\n"); writer.flush(); BufferedOutputStream writerfichier = new BufferedOutputStream(new FileOutputStream(fichier)); byte tab[] = new byte[1024]; int nbreoctet = 0; try{ while(true) { nbreoctet = client.getInputStream().read(tab); if(nbreoctet == -1) break; writerfichier.write(tab, 0, nbreoctet); writerfichier.flush(); tab = new byte[1024]; } client.getInputStream().close(); }finally { writerfichier.close(); } }catch(Exception e) { e.printStackTrace(); } } }
Savez vous comment je peux faire pour libérer la ressource?
j'ai essaye de mettre un
Dans le premier code, mais il me fermait toute la socket, ce que je ne veux pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part client.getOutputStream.close();
merci d'avance
Partager