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

Entrée/Sortie Java Discussion :

Transférer un fichier accompagné de son nom


Sujet :

Entrée/Sortie Java

  1. #1
    Membre actif
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Points : 226
    Points
    226
    Par défaut Transférer un fichier accompagné de son nom
    Bonsoir tout le monde,

    je cherche un moyen pour transférer un fichier par socket accompagné de son nom pour ne pas avoir à introduire son nom à chaque fois à chaque transfert, pour l'instant voila ce que j'ai :

    Envoi :

    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
     
            try {
                String Chemin = "D:\\Zest\\1.txt";
     
                ServerSocket Servsocket = new ServerSocket(80);      
     
                File F = new File(Chemin);
     
                String nom = F.getName();  // ici j'ai pris le nom de mon fichier.
     
                Socket socket = Servsocket.accept();
     
                int NOL;
     
                byte[] MonBuffer = new byte[1024];
     
                OutputStream OS = socket.getOutputStream();
           //     BufferedInputStream BIS = new BufferedInputStream(new FileInputStream(F));
                BufferedInputStream enbyte = new BufferedInputStream(new FileInputStream(nom));  // ici j'ai transformé mon String en byte (je crois)
     
     
                while ((NOL = enbyte.read(MonBuffer)) > 0) {         // j'ai remplacé le contenu du fichier par le nom
                    OS.write(MonBuffer, 0, NOL);
                    OS.flush();                                                       // j'envoie le nom
                }
     
                socket.close();
     
            } catch (IOException ex) {
                Logger.getLogger(Envoi.class.getName()).log(Level.SEVERE, null, ex);
            }
    Réception:

    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
     
    String Chemin = "D:\\test.txt";    
     
    String Nom = null;     // ici je crée un String vide 
     
            try {
     
    			Socket socket = new Socket("127.0.0.1", 80);
    			int NOL;
    			byte[] Monbuffer = new byte[1024];
                FileOutputStream FOS = new FileOutputStream(Chemin);                  // je le mets à la place du chemin pour qu'il reçoive les données 
                BufferedOutputStream OUT = new BufferedOutputStream(FOS);
     
     
                InputStream IStream = socket.getInputStream();
     
                while((NOL=IStream.read(Monbuffer)) >0){
                    FOS.write(Monbuffer, 0, NOL);
                }
                FOS.close();
                socket.close();
            } catch (IOException ex) {
                Logger.getLogger(reception.class.getName()).log(Level.SEVERE, null, ex);
            }
     
    jTextField1.setText(Nom); // ici j'affiche le mon String dans un composant TextField.
    (je tiens à préciser que ce code à la base n'était pas mien) j'y ai fait quelques modifications. J'espère que ma demande est compréhensible, merci bien pour votre aide !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le serveur peut tout simplement transmettre le nom du fichier dans le même stream que celui utilisé pour transmettre le contenu du fichier. Le client va lire au début le nom du fichier, puis le contenu : il faut donc au client un moyen de savoir quand le nom s'arrête et le contenu commence. On peut tout simplement utiliser un caractère qu'on ne trouve forcément pas dans un nom de fichier, comme \n (ascii 10) par exemple.

    Donc le serveur va :
    1. écrire le nom dans le flux
    2. écrire un \n
    3. écrire le contenu du fichier (comme c'est fait actuellement)


    Le client va
    1. lire les octets dans le flux comme jusqu'à ce qu'on trouve 10, et les concaténer en tant que char, par exemple dans un StringBuilder (sauf le \n)
    2. Créer le fichier avec le nom obtenu
    3. Ecrire le contenu du flux dans le fichier (comme c'est fait actuellement)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre actif
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Points : 226
    Points
    226
    Par défaut
    salut,

    j'ai essayé d'envoyer le nom du fichier en premier et au réception le récupérer dans une var String, mais j'ai eu une erreur, je vais modifier le code en haut pour que tu puisses voir ce que j'ai ajouté.

  4. #4
    Membre actif
    Avatar de guatto
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 179
    Points : 226
    Points
    226
    Par défaut
    Problème résolu, merci pour la procédure !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Rechercher un fichier en connaissant son nom et son extension
    Par richert90 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/10/2013, 18h21
  2. Exécuter un fichier sans avoir son nom
    Par fiofiotte dans le forum C
    Réponses: 2
    Dernier message: 02/12/2010, 15h50
  3. Fermer un flux sur un fichier à partir de son nom
    Par Djobird dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 17/06/2009, 09h18
  4. Comment ouvrir un fichier sans connaitre son nom
    Par APoLLoN1234 dans le forum C++
    Réponses: 8
    Dernier message: 10/09/2006, 18h04
  5. Recherche d'un fichier d'aprés son nom
    Par gids01 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 10/05/2006, 10h19

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