[RESOLU]Libérer les ressources
Bonjour,
J'ai un petit problème, j'ai un code qui fait un copier coller d'un fichier, le voici:
Code:
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:
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:
client.getOutputStream.close();
Dans le premier code, mais il me fermait toute la socket, ce que je ne veux pas.
merci d'avance