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 :

Copie de fichier impossible en Java ?


Sujet :

Entrée/Sortie Java

  1. #1
    Membre actif
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Points : 272
    Points
    272
    Par défaut Copie de fichier impossible en Java ?
    Bonjours a tous !
    Voila j'aimerai copier un fichier de mon disque dur vers un autre dossier, avec la méthode renameTo(File dest) de l'objet File on peut déplacer un fichier mais pas le copier. Avez vous une méthode pour réaliser cette opération ?

    J'aimerai également pouvoir définir les propriétés "caché" (=hidden) et "lecture seule" (=read only) d'un fichier...L'objet File ne possède apparement que les méthodes setReadOnly() et setLastModified() ! Je suis vraiment coincé la, je ne vois pas la solution.

    Si quelqu'un peut me renseigner sur ces questionsse serait sympas
    Merci d'avance,
    @+


    Message édité par Miss Gaelle : Ajout de tag dans le titre.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Pour faire une copie de fichier en Java, tu ouvres un flux en lecture sur ton fichier de depart, via un objet Reader, (FileReader par exemple) tu lis les lignes de données (methodes read), et tu crées ton fichier en sortie via un FileWriter par exemple, dans lequel tu envoies le flux de lecture, avec un joli write...

    Regarde les objets du package java.io, ca te donnera la solution...

  3. #3
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    pour copier ton fichier un bon vieux parsing du vieux et ecriture ligne a ligne (ou bit a bit...) dans un nouveau fichier tout fraichement créé pour accueillir les données. Je dis ca en considérant que tu a fait le tour de api et qui n'existe pas de solutions plus simple a coder.
    Pour les propriétés et doit falloir modifier l entete du fichier, mais j ai jamais fait ca en java dsl
    "vaste programme"

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: Copie de fichier impossible en Java ?
    Salut,

    Citation Envoyé par Fildz
    Voila j'aimerai copier un fichier de mon disque dur vers un autre dossier, avec la méthode renameTo(File dest) de l'objet File on peut déplacer un fichier mais pas le copier. Avez vous une méthode pour réaliser cette opération ?
    Il y a un exemple dans la section Codes sources : Copie de fichier avec NIO.

    Citation Envoyé par Fildz
    J'aimerai également pouvoir définir les propriétés "caché" (=hidden) et "lecture seule" (=read only) d'un fichier...L'objet File ne possède apparement que les méthodes setReadOnly() et setLastModified() ! Je suis vraiment coincé la, je ne vois pas la solution.
    Il n'est pas possible de modifier l'attribut "caché" d'un fichier car cette notion est propre à Windows... Sous les systèmes Unix/Linux cet attribut n'existe pas . Les fichiers caché commencent par un point ".".

    Donc : sous Windows il faut faire appel à JNI ou à Runtime.exec("attrib") pour modifier cet attribut.

    Sous les systèmes Unix/Linux il faut renommer le fichier (Sous Mac je ne sais pas mais je pense que ce doit être la même chose).

    a++

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    D'apres la doc, le charactere caché est dépendant du système sur lequel tu bosses, donc pas gérable par java directement, qui se veut portable...

  6. #6
    Membre actif
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Points : 272
    Points
    272
    Par défaut
    Merci à tous pour vos réponses si rapide !

    Pour la copie de fichier, créant ma propre classe de manipulation de dossier, je pense tenter la méthode de ghorgor, avant d'eventuellement me rabattre sur une classe créé par quelqu'un d'autre.

    Pour les fichiers cachés donc, si je suis sur un environnement windows je vais essayer Runtime.exec() , si il s'agit d'un environnement linux il suffira de renommé le fichier sans le '.'

    Pour la lecture seule je vais également essayer Runtime.exec().

    Merci encore à tout le monde,
    je vous tiens si j'arrive tout ça !

    @+

  7. #7
    Membre actif
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Points : 272
    Points
    272
    Par défaut
    Me revoila !

    Alors, pour la copie de fichier l'utilisation de flux copiant byte à byte fonctionne mais avec une incroyable lenteur ! Je me suis très vite rabattu sur la solution de adiGuba avec la nouvelle API des Entrées sorties qui fonctionne de maniere diablement efficace

    Il me reste à programmé la définition des attributs d'un fichier (lecture seule, caché ...).

    Au passage j'ai regardé comment était fait la classe File, et j'ai vu qu'ils utilisaient un objet FileSystem pour toute ses manipulations....J'ai donc essayer de faire pareil mais cette objet est soit disant inconnu par mon compilateur ! Etrange, non ?

    Je vais en profiter pour programmer également une fonction de suppression de dossier. Car la fonction delete() de File ne fonctionne que sur des fichiers ou des dossiers vides

    Je vous tiendrais au courant de l'avancement de tout ça toujours dans ce topic. Je pense que je regouperais le tout dans une classe ça peut toujours être utile

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 220
    Points : 266
    Points
    266
    Par défaut
    Alors, pour la copie de fichier l'utilisation de flux copiant byte à byte fonctionne mais avec une incroyable lenteur !
    Si tu fais la lecture d'un byte, puis son ecriture, oui c'est tres lent, les accès en lecture Ecriture sont tres gourmand, donc si tu en fais autant que tu as de characteres dans ton fichier, la performance est assez lamentable...

    Par contre, si tu fais une lecture puis une ecriture par blocs, genre tu charges un byte[5000], tu vas augmenter considerablement tes performances... (Et de meme en ecriture, utiliser write(byte[]) plutot que write(byte))

    Pour te donner un ordre d'idee, je fais ca sur des fichiers de 200 Mo, avec un traitement et une modification au milieu, ca me prend 3 minutes...

  9. #9
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fildz
    Alors, pour la copie de fichier l'utilisation de flux copiant byte à byte fonctionne mais avec une incroyable lenteur ! Je me suis très vite rabattu sur la solution de adiGuba avec la nouvelle API des Entrées sorties qui fonctionne de maniere diablement efficace
    Pour la lecture byte à byte il faut utiliser un buffer !!!
    Si tu lit les byte un à un c'est normal que ce soit lent car tu fait un accès disque par octet dans le fichier. Donc si le fichier fait 4 Ko tu auras fait 4000 accès disque... Or il se trouve que les accès disque sont assez lent...
    En utilisant un buffer de 1000 byte ca devrait déjà aller nettement plus vite...

    Quoi qu'il en soit la solution des channels est plus propre et plus simple... De plus elle doit surement utiliser des appels système bas niveaux


    Il me reste à programmé la définition des attributs d'un fichier (lecture seule, caché ...).

    Citation Envoyé par Fildz
    Au passage j'ai regardé comment était fait la classe File, et j'ai vu qu'ils utilisaient un objet FileSystem pour toute ses manipulations....J'ai donc essayer de faire pareil mais cette objet est soit disant inconnu par mon compilateur ! Etrange, non ?
    Non il s'agit tout simplement d'une classe dont la porté est limité au package java.io. Tu ne peux donc pas l'utiliser (Voir FAQ : Que signifient les mots-clés public, private et protected ?).

    Par contre je ne pense pas que tu en ais besoin. Cette classe contient le code propre à chaque système des méthodes de File. Donc elle ne te permettra pas plus de chose que File...


    a++

Discussions similaires

  1. [DOM] Copie de fichier -> impossible de parser le nouveau
    Par Anium dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 03/07/2009, 14h54
  2. Copie 2 fichiers différents = Snippet.Java
    Par Baptiste Wicht dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 29/05/2008, 15h41
  3. Copie fichier impossible car fichier utilisé
    Par Mister Nono dans le forum Hibernate
    Réponses: 1
    Dernier message: 22/05/2007, 09h41
  4. Copie de Fichiers de NTFS vers FAT32 impossible avec Knoppix 3.3
    Par mysteriousFreak dans le forum Composants
    Réponses: 2
    Dernier message: 12/01/2007, 12h56

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