Bonjour,
J'ai un petit problème, j'ai un code qui fait un copier coller d'un fichier, le voici:

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(); }
	}
 
}
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
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(); }
	}
 
}
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.
Savez vous comment je peux faire pour libérer la ressource?
j'ai essaye de mettre un

Code : Sélectionner tout - Visualiser dans une fenêtre à part
client.getOutputStream.close();
Dans le premier code, mais il me fermait toute la socket, ce que je ne veux pas.

merci d'avance