IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Copier un fichier en reseau


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Par défaut Copier un fichier en reseau
    Bonjour à tous

    Je vais vous expliquer ma situation, j'ai réalisé un programme qui à la fin a pour but de copier un fichier de mon disque dur à un disque dur réseau.

    Sachant que dans mon programme j'ai un fichier xml d'arrivé de type :
    <final>C:/tmp/</final> qui est le chemin ou je vais copier mon fichier dedans.

    Donc en local ca marche nickel sur les partitions de mon dd.
    Mais en réseau c'est le panique ca marche pas du tout (je ne suis pas expert en réseau).
    Donc mon technicien réseau a crée un lecteur réseau(Y je peux copier coller des fichiers à la main mais impossible via mon programme en mettant:
    <final>Y:/</final> se qui devrait marcher.

    Donc est-ce que c'est un problème de mon programme(code java) ou du réseau en lui même, on a pensé à une solution (est-ce que je peux copier coller sur un dd via une ip en java?).

    Ou alors est-ce que c'est possible d'utiliser ce lien ci \\Adlin\klshare par exemple dans mon programme comme adress d'arrivé on a essayé mais ca ne marche pas.

    Je vous remercie d'avance pour les solutions que vous pourrez m'apporter.
    Cordialement

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    a partir du moment ou tu mapper un lecteur réseau sur une lettre de lecteur, il me semble que ca devrait fonctionner, indépendament du language. Pour accéder directement à des ressources partagées windows en utilisant le protocole CIFS, il y a, je pense, la librairie JCIFS qui devrait faire l'affaire.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Par défaut
    recoucou,

    Je vais voir ta librairie, mais j'ai un poil avancé sur mon problème.
    Un ptit bug plutot mystique, fin c'est la première fois que ca m'arrive.

    voici le nom de mon fichier à la fin (apres la copie):
    File destinationFile = new File("/\\192.168.0.33/Share/blabla.pdf");

    Alors en faisant juste play avec Eclipse ca marche il me crée bien le blabla.pdf, idem avec le .jar il marche nickel mais quand je crée le .exe avec JSmooth ca marche plus :/.
    comment est-ce possible que juste en changeant que ca marche plus apres la compilation en .exe ? les "/\\" qu'il interprète mal?

    maj:
    j'ai fait un string avec le chemin en dur et je la met dans mon File destinationFile et je print voila le resultat:
    s=\\192.168.0.33/Share/blabla.pdf
    destination=\\192.168.0.33\Share\blabla.pdf

    on peut voir la difference des / \ mais le pire cest que ca marche en faisant play et pas avec mon .exe :/

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Je ne suis pas sur de ce que tu estime représenter avec çà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File destinationFile = new File("/\\192.168.0.33/Share/blabla.pdf");
    Ca correspond au fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /\192.168.0.33/Share/blabla.pdf
    une fois l'échappement java fait sur le \\, Essaie plutot au minimum


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File destinationFile = new File("\\\\192.168.0.33\\Share\\blabla.pdf");
    Mais je suis pas certains que ca passe.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Par défaut
    Ce que tu as mis et le bon lien mais on est entrain de devenir fou sur les résultats le fait que ca marche sur eclipse et non en .exe j'espere que cest pas le logiciel JSmooth qui me chie un vieu .exe

    Je vais voir avec d'autres logiciels.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Vérifie que la jvm est bien la même.

  7. #7
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 29
    Par défaut
    Batteries de test réalisé, j'ai l'impression que le fait d'avoir mis un lien en reseau qui fait planter la copie
    Je vais t'expliquer rapidement le but, en gros on fait une redirection de l'imprimante(avec redmon qui ouvre un port) vers notre logiciel(.exe).

    donc j'ai fait un programme simple qui nous a fait un peu avancer sur le probleme:

    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
     
    import java.io.File;
     
    import jcifs.smb.SmbFile;
     
    public class CopyTo {
     
    	public static void main(String[] args){
     
    		File srcFile = new File("Exemple.pdf");
    		String s = "\\\\192.168.0.33\\Share\\blabla.pdf";
    		File destinationFile = new File(s);
    		System.out.println("destination="+destinationFile);	
    		System.out.println("s="+s);
    		copier(srcFile, destinationFile);
    	}
     
    	public static boolean copier( File source, File destination ){ //Methode permettant la copie d'un fichier
    		boolean resultat = false;
     
     
    		java.io.FileInputStream sourceFile=null;
    		java.io.FileOutputStream destinationFile=null;
    		try {
     
    		destination.createNewFile();
     
    		sourceFile = new java.io.FileInputStream(source);
    		destinationFile = new java.io.FileOutputStream(destination);
     
    		byte buffer[]=new byte[512*1024];
    		int nbLecture;
    		while( (nbLecture = sourceFile.read(buffer)) != -1 ) {
    		destinationFile.write(buffer, 0, nbLecture);
    		}
     
     
    		resultat = true;
    		} catch( java.io.FileNotFoundException f ) {
    		} catch( java.io.IOException e ) {
    		} finally {
     
    		try {
    		sourceFile.close();
    		} catch(Exception e) { }
    		try {
    		destinationFile.close();
    		} catch(Exception e) { }
    		}
    		return( resultat );
    		}
    }
    Donc dans se programme lorsque je lance le .exe il marche bien il va copier exemple.pdf sur le réseau (se qui règle mon problème de base).
    Puis avec la redirection ca ne marche pas donc je me suis dis c'est parce que je lui envoie dans l'entrée standard des informations donc il plante(car lors de son lancement la console de débugage quitte direct).

    Alors j'ai mis ce bout de code dès le debut pour traiter se que l'imprimante m'envoie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    byte[] baps = MyIO.readInputStream();
     
    String sPath = "" + System.currentTimeMillis();
    MyIO.writeBytes(sPath + ".ps", baps);
    Qui va appeler la classe suivante:

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
    public final class MyIO 
    {
     
    	private static final byte[] readInputStream(InputStream is)
    			throws FileNotFoundException, IOException 
    			{
    		StringBuffer sb = new StringBuffer();
    		InputStreamReader isr = new InputStreamReader(is);
    		BufferedReader bufReader = new BufferedReader(isr);
    		while (true) 
    		{
    			String sLine = null;
    			sLine = bufReader.readLine();
    				if (sLine == null) 
    				{
    					break;
    				}
    			sb.append(sLine).append("\r\n");
    		}
    		bufReader.close();
    		return sb.toString().getBytes();
    	}
     
    	public static final byte[] readInputStream() 
    	{
    		byte[] baRes = null;
    		try 
    		{
    			baRes = readInputStream(System.in);
    		}
    		catch (FileNotFoundException e) 
    		{
    			e.printStackTrace();
    		}
    		catch (IOException e) 
    		{
    			e.printStackTrace();
    		}
    		return baRes;
    	}
     
    	public static final boolean writeBytes(String sFile, byte[] ba) 
    	{
    		FileOutputStream out = null;
    		try 
    		{
    			out = new FileOutputStream(sFile);
    			out.write(ba, 0, ba.length);
     
    		}
    		catch (FileNotFoundException e) 
    		{
    			e.printStackTrace();
    		}
    		catch (IOException e) 
    		{
    			e.printStackTrace();
    		}
    		finally 
    		{
    			if (out != null) 
    			{
    				try 
    				{
    					out.close();
    				}
    				catch (IOException e) 
    				{
    					e.printStackTrace();
    				}
    			}
    		}
    		return true;
    	}
    }
    Et là il va créer mon .ps réaliser le programme en entier et ne va pas copier(que lorsque le lien est reseau \\share\blabla.pdf).
    Ce qui est vraiment pas logique, on a pensé à un conflit de port p-e avec redmon car il n'y a aucune raison que le .exe marche très bien en double cliquant dessus et pas via redmon + lien reseau.
    Car si tu changes le chemin reseau et que tu mets en local sur ton dur ca marche nickel :/. Juste le fait de mettre un lien en reseau me fait tout planter sur la copie de mon fichier.

    Merci d'avance et bonne soirée
    Cordialement

  8. #8
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Salut,
    je ne sais pas si c'est lié à ton problème, mais de notre côté nous avions aussi des problèmes avec les lecteurs réseau sous Windows:
    le problème se situe au niveau de la session utilisateur que tu utilises pour lancer ton programme: une session peut connaitre un lecteur réseau sans que les autres puissent y accéder, c'est notamment un problème si tu met ton programme en service windows.
    Nous nous en étions sortis en faisant un "net use" à l'intérieur du programme java, afin de RECREER le lecteur réseau dans la session du programme java.

    Vu que tu commences à parler de lien réseau ça me fait penser à ça...

    PS: à noter qu'une session =/= un login.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/09/2009, 21h33
  2. Copier certains fichiers d'une arborescence ?
    Par narmataru dans le forum Linux
    Réponses: 4
    Dernier message: 27/04/2004, 12h15
  3. Copier coller Fichier windows
    Par KPitN dans le forum Windows
    Réponses: 8
    Dernier message: 20/04/2004, 17h32
  4. Batch pour copier des fichier
    Par borgfabr dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/03/2004, 07h55
  5. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 08h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo