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 :

FileOutputStream : Syntaxe du nom de fichier incorrect


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 96
    Par défaut FileOutputStream : Syntaxe du nom de fichier incorrect
    Bonjour,

    Je souhaite, à partir d'un poste Windows, récupérer des fichiers se trouvant en partage sur un autre poste Windows.

    Les noms de fichier sont du style : RIOM MVB T215_6077[2011-1-19][07-43-20].xml

    J'utilise la méthode suivante pour faire un copie de fichier :
    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
     
    private boolean copyFile(File pSrcFile, File pDstFile) throws IOException {
    		boolean lResult = false;
     
    		// Open channels
    		FileInputStream lInputStream = new FileInputStream(
    				pSrcFile);
    		FileOutputStream lOutputStream = new FileOutputStream(
    				pDstFile);
     
    		try {
    			// Copy from input to output channel with 0.5Mo buffer size
    			byte buffer[] = new byte[512 * 1024];
    			int nbLecture;
     
    			while ((nbLecture = lInputStream.read(buffer)) != -1){
    				lOutputStream.write(buffer, 0, nbLecture);
    			}
     
    			lResult = true;
    		} finally {
    			// Close channels
    			try {
    				lInputStream.close();
    			} catch (IOException e) {
    				// Ne rien faire
    			}
    			try {
    				lOutputStream.close();
    			} catch (IOException e) {
    				// Ne rien faire
    			}
    		}
    		return lResult;
    	}
    Lors du new FileOutputStream() j'ai l'erreur suivante : Syntaxe du nom de fichier, de répertoire ou de volume incorrecte.

    Si je crée un partage Windows sur ma machine la copie de fichier se fait correctement.

    Qu'elle peut être l'origine du problème ?
    Toute piste sera la bien venue.

    Merci.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Avant toute chose, trois remarques :
    • Le type de retour est totalement inutile puisqu'il vaudra toujours true. En effet en cas d'erreurs une exceptions est remontée (et donc il n'y a pas de retour).
    • Tu ignores les erreurs des fermetures de fichiers. Même si c'est rare cela peut arriver et tu ne vas pas pouvoir le détecter. Il est préférable de laisser remonter ces erreurs.
    • De même ton try/finally unique a une faille : si une exception survient lors de l'ouverture du flux de sortie, alors le flux d'entrée ne sera jamais libéré...



    Perso j'utiliserais plutôt un code comme ceci :
    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
    	private void copyFile(File pSrcFile, File pDstFile) throws IOException {
    		// Open channels
    		FileInputStream lInputStream = new FileInputStream(pSrcFile);
    		try {
    			FileOutputStream lOutputStream = new FileOutputStream(pDstFile);
    			try {
    				// Copy from input to output channel with 0.5Mo buffer size
    				byte buffer[] = new byte[512 * 1024];
    				int nbLecture;
     
    				while ((nbLecture = lInputStream.read(buffer)) != -1) {
    					lOutputStream.write(buffer, 0, nbLecture);
    				}
    			} finally {
    				lOutputStream.close();
    			}
    		} finally {
    			lInputStream.close();
    		}
    	}

    Quand à ton problème, il semble venir des chemins que tu passes en paramètres à ces méthodes.
    Quels sont les valeurs de pSrcFile et pDstFile ???

    a++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 96
    Par défaut
    Bonjour,

    Merci adiGuba pour les précisions

    J'ai fait d'autres essais et mon problème survient lorsque le fichier source est utilisé par une autre application.

    Connaissez-vous un moyen de savoir si un fichier est en cours d'utilisation afin de ne pas demander la copie de ces fichiers ?

    Merci

  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
    la seule solution est d'essayer et de traiter l'erreur. L'api java ne permet (pas encore) de vérifier si un verrou exclusif est actuellement sur le fichier.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 96
    Par défaut
    Merci, c'est ce que j'ai fait mais je ne suis pas sur que ce soir la seule raison qui lève cette exception.

    Quoi qu'il en soit mon problème est résolu

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/02/2012, 19h32
  2. Réponses: 0
    Dernier message: 08/02/2011, 11h20
  3. [AC-2007] erreur "nom de fichier incorrect"
    Par chloemartin dans le forum Access
    Réponses: 1
    Dernier message: 01/02/2010, 21h58
  4. [VS2005] Verifier la syntax d'un nom de fichier.
    Par belfaigore dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/04/2007, 12h03
  5. Erreurs syntaxe nom de fichier etc
    Par PhiberOptik dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/02/2007, 13h46

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