Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1336 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java] Copier des fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] Copier des fichiers

n°677826
Titalium
Posté le 19-03-2004 à 10:36:54  profilanswer
 

J'aimerai copier un ou plusieurs fichiers depuis un répertoire partagé sur un de mes serveurs sur mon disque local. Quelqu'un aurai un bout de code prêt à l'emploi ?
 
Je précise : je suis complètement nouveau au Java (merci de votre indulgence si je comprend rien), je connais pas mal Delphi mais je trouve pas de fonctions équivalentes à celles que j'utilisais en Delphi...

mood
Publicité
Posté le 19-03-2004 à 10:36:54  profilanswer
 

n°677832
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 19-03-2004 à 10:41:30  profilanswer
 

http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
Même si le lien est pas évident à trouver, y a une fonction "Recherche avancée" en haut à droite de la page :o

n°677836
El_gringo
Posté le 19-03-2004 à 10:47:26  profilanswer
 

'faudrait dire à Joce (c'est bien lui qui développe le forum Présence PC, non ?) de faire comme sur JGuru. Une fonctionnalité génial j'trouve :
Quand tu postes un nouveau topic, avant de valider le topic, il te faire une recherche dans le forum sur les termes du sujet. Ensuite, si on a effectuvement rien trouvé, il faut confirmer le post.


---------------
Les Vers Solitaires, on aime ... ou pas !
n°677840
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 19-03-2004 à 10:48:32  profilanswer
 

Ba surtout, faut éviter de rendre le lien vers la recherche encore plus invisible [:kiki] Avant c'était à peu près visible, y avait une image et tout ; maintenant c'est plus qu'un pôv lien de base tout caché...

n°677848
Titalium
Posté le 19-03-2004 à 10:56:28  profilanswer
 

Merci quand même, j'avais trouvé ce post, mais c'est pas top comme solution, je pensais qu'il existait quelque chose de tout encapsulé dans une procedure.
 
 
    public static void copyFileBuffered(final String currentFile, final String newFile, final int bufferSize) throws FileNotFoundException, IOException {  
        final BufferedReader in = new BufferedReader(new FileReader(currentFile), bufferSize * 1024);  
        try {  
            final BufferedWriter out = new BufferedWriter(new FileWriter(newFile), bufferSize * 1024);  
            try {  
                int s = in.read();  
                while(s != -1) {  
                    out.write(s);  
                    s = in.read();  
                }//end while  
                out.flush();  
              } finally {  
                out.close();  
            }//end try  
          } finally {  
            in.close();  
        }//end try  
    }//end copyFileBuffered
 
 
J'arrive pas à faire tourner ce code, je des problème avec les exceptions.


Message édité par Titalium le 19-03-2004 à 10:57:29
n°677852
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 19-03-2004 à 10:58:37  profilanswer
 

Titalium a écrit :

Merci quand même, j'avais trouvé ce post, mais c'est pas top comme solution, je pensais qu'il existait quelque chose de tout encapsulé dans une procedure.


Ba non y a pas ; c'est vrai que c'est un peu regrettable mais c'est comme ça [:spamafote]

n°677863
nerisson
Pic-pic
Posté le 19-03-2004 à 11:02:11  profilanswer
 

Titalium a écrit :

Merci quand même, j'avais trouvé ce post, mais c'est pas top comme solution, je pensais qu'il existait quelque chose de tout encapsulé dans une procedure.
 
 
    public static void copyFileBuffered(final String currentFile, final String newFile, final int bufferSize) throws FileNotFoundException, IOException {  
        final BufferedReader in = new BufferedReader(new FileReader(currentFile), bufferSize * 1024);  
        try {  
            final BufferedWriter out = new BufferedWriter(new FileWriter(newFile), bufferSize * 1024);  
            try {  
                int s = in.read();  
                while(s != -1) {  
                    out.write(s);  
                    s = in.read();  
                }//end while  
                out.flush();  
              } finally {  
                out.close();  
            }//end try  
          } finally {  
            in.close();  
        }//end try  
    }//end copyFileBuffered
 
 
J'arrive pas à faire tourner ce code, je des problème avec les exceptions.


Koi ??? Il ne te plait pas mon code ???  ;)


---------------
Light is right
n°677873
Titalium
Posté le 19-03-2004 à 11:05:23  profilanswer
 

nerisson a écrit :


Koi ??? Il ne te plait pas mon code ???  ;)  


 
Si, si, ça vient petit à petit, comme je l'ai dit, je suis pas du tout rompu au Java, c'est pour ça que des choses toute simple me paraissent pas forcément claires... Là, j'ai réussi à importer les bonnes classes (je suis trop fort :D), mais quand j'appelle la fonction en question dans mon code, j'ai l'erreur de compilation suivante :
 
MainProgram.java [28:1] unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
            copyFileBuffered("kiki", "koko", 2048);
            ^
1 error
Errors compiling MainProgram.
 
Je sais plus comment on "catch" une exception, d'où mon souci... Je vous avais prévenu, je suis tout nouveau sur Java...;)

n°677886
Titalium
Posté le 19-03-2004 à 11:10:55  profilanswer
 

C'est bon j'ai trouvé, je vais tester ma copie...
 
Au fait, pour effecer un fichier, on fait comment ? Ou au moins pour effacer tout son contenu ?

n°677888
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 19-03-2004 à 11:11:22  profilanswer
 

File.delete()
Mate la javadoc hein, c'est utile :o

mood
Publicité
Posté le 19-03-2004 à 11:11:22  profilanswer
 

n°677915
Titalium
Posté le 19-03-2004 à 11:33:05  profilanswer
 

C'est bien ce que je fais, mais vous trouvez vraiment que c'est facile de trouver des choses dans la JavaDoc quand on sait pas par où chercher ?
 
En tout cas merci de me répondre, c'est sympa.

n°677937
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 19-03-2004 à 11:45:46  profilanswer
 

Titalium a écrit :

C'est bien ce que je fais, mais vous trouvez vraiment que c'est facile de trouver des choses dans la JavaDoc quand on sait pas par où chercher ?


Ba les opérations sur les fichiers, j'trouve pas dur de penser à aller regarder dans java.io.File :o

n°677973
Titalium
Posté le 19-03-2004 à 12:02:45  profilanswer
 

Quand on sait les choses, tout parait évident, c'est sur. Personnellement j'avais pris l'habitude de taper le mot que je cherchais dans mon éditeur de texte, de positionner mon curseur dessus puis d'appuyer sur F1, après c'était l'aide de Delphi qui faisait le travail et me proposait les correspondances.
 
Je sais qu'on peut pas demander la lune, mais je trouvais ça pratique, car pas besoin de connaitre tout sur le bout des doigts pour aller à l'information. Enfin, je vais m'y faire.
 
Du coup j'ose plus poser de questions, j'ai peur de me faire gronder, pourtant j'en ai encore une ou deux :D

n°677980
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 19-03-2004 à 12:07:14  profilanswer
 

Titalium a écrit :


Du coup j'ose plus poser de questions, j'ai peur de me faire gronder, pourtant j'en ai encore une ou deux :D


Bin faut pas. Avant de poser la question, demande-toi :
* peux-tu trouver facilement un package de la Javadoc qui contienne éventuellement une classe qui fasse ce que tu cherches ? Par exemple, pour une connexion HTTP, c'est du réseau -> java.net. Système de fichiers, lecture/écriture, etc... -> java.io. Et ainsi de suite.
* la question se réfere-t-elle à des notions de base ? Si oui, il y a de très fortes chances qu'elle ait été discutée sur ce forum -> lien (bien caché il est vrai) Recherche avancée en haut à droite de la page. Sinon, Google avec les mots-clés bien renseignés te trouvera certainement ce que tu cherches.
 
Si rien de tout ce la ne peut t'aider, poste la question dans le forum. Le tout est de savoir se débrouiller tout seul, après ça roule nickel sans souci :o

n°678044
Titalium
Posté le 19-03-2004 à 13:16:11  profilanswer
 

Je cherche encore un peu avant de poser quelques questions, mais voila ce que je peux répondre :
 
* le package à importer et dans lequel je vais trouver les choses, je cherche dans la JavaDoc, OK. Mais pour moi, java.io pour accéder aux fichiers, c'est pas forcément évident. Une fois qu'on sait quel package c'est forcément ça tombe sous le sens (io pour Input Output j'imagines, bon sang mais c'est bien sur ;)). Mais les noms de packages, même s'ils sont généralement bien choisis ne correspondent pas forcément aux mots clés qui viennent à l'esprit.
* pour ce quiest de la recherche, je suis un ancien du forum, je la connais bien, mais là encore, il suffit de ne pas se servir du bon mot clé et on ne trouveras jamais l'infos. La preuve que je connais la recherche, j'avais bien trouvé le topic de nerisson, mai je pensais qu'il existait une méthode plus simple, d'où mon topic.
* pour ce qui est de google, je peux pas m'en servir. Oui, là je suis au boulot, je développe (ou tout du moins j'essaie) un petit truc pour la première fois en Java, j'aimerai bien me servir du net. Or, je n'ai accès qu'à très peu de site en raison du proxy qui me bloque 99% des sites. J'ai accès au forum, c'est déjà très bien mais si je fais une recherche sur Google (auquel j'ai également accès), je ne pourrai accéder à aucune réponse car crac : page bloquée sur le proxy.
 
De tout cela, comprenez bien que je sais que je fais chier avec mes questions de débutant, mais j'ai pas trop le choix, parce que j'ai pas accès aux ressources les plus utiles quand on développe : les sites de prog !
 
Sur ce, je cherche encore un peu mon truc qui m'embête sur mon projet, et si je trouve pas je reviens poser timidement une question :D Au fait, j'ai installé Forte (je suis habitué à développé en RAD pour le graphique, c'est pour ça que je me suis pas mis sous Eclipse).

n°678104
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 19-03-2004 à 14:11:33  profilanswer
 

Titalium a écrit :


* pour ce qui est de google, [...] je ne pourrai accéder à aucune réponse car crac : page bloquée sur le proxy.


Essaie de voir la page en cache, ça peut aider à contourner :D

n°678179
Titalium
Posté le 19-03-2004 à 15:40:23  profilanswer
 

Je suis en train de chercher :
 
* Comment lancer un soft depuis mon appli. J'ai trouvé ce thread :
http://forum.hardware.fr/forum2.ph [...] subcat=390
Mais je comprend pas tout, ils parlent d'une classe Program, mais je trouve pas où elle est... et pourtant j'ai cherché dans la JavaDoc :D

n°678186
Titalium
Posté le 19-03-2004 à 15:48:12  profilanswer
 

Bon, j'ai trouvé, je passe par :  
 
Runtime.getRuntime().exec("macommande" );
 
Pas facile tous les jours quand même :D

n°678200
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 19-03-2004 à 15:56:41  profilanswer
 

Titalium a écrit :

Je suis en train de chercher :
 
* Comment lancer un soft depuis mon appli. J'ai trouvé ce thread :
http://forum.hardware.fr/forum2.ph [...] subcat=390
Mais je comprend pas tout, ils parlent d'une classe Program, mais je trouve pas où elle est... et pourtant j'ai cherché dans la JavaDoc :D


Ah yaisse :lol:
C'était le délire du moment ; y a une API pour faire des interfaces graphiques qui s'appelle SWT (c'est fait par les gars qui ont développé Eclipse). Et dans cette API, y a une classe qui s'appelle Program et qui permet de lancer des applis. Comme je cautionne l'utilisation de cette API face à la merde qu'est Swing (:o), j'ai fait mon relou ce jour-là [:ddr555]
Maintenant, pour faire ça, le plus simple est efectivement la méthode que t'as trouvée avec Runtime :D

n°678210
Titalium
Posté le 19-03-2004 à 16:04:12  profilanswer
 

Bon alors là je pense que j'ai un vrai problème...
 
J'utilise le code de nerisson pour faire ma copie de fichier. Je vous explique pour quoi je m'en sers. Les postes de ma boite tournent sur Lotus Notes. On a un répertoire partagé qui contient un dossier correspondant à chaque User du domaine NT et qui contient les fichiers user.id, bookmark.nsf, desktop5.dsk et names.nsf de chaque utilisateur. C'est pour qu'on ai une sauvegarde de ces fichiers.
Le but de mon appli, qui fonctionne maintenant, est :
- à la connexion d'un User sur le domaine, l'appli se lance.
- elle récupère le nom de l'utilisateur
- elle supprime les fichiers cités plus haut en local
- elle recopie les fichiers du rep de sauvegarde en local
- elle lance Lotus
De cette manière, un User, quel que soit le poste sur lequel il se trouve, retrouve sa boite mail, son environnement Notes, etc...
 
Le pb est le suivant : l'application se comporte comme il faut (elle supprime les fichier si besoin, recopie ceux de sauvegarde en local et lance Notes), mais là quand Notes se lance, il m'indique des fichiers altérés et l'impossibilité de se lancer :/
J'ai essayé de faire une copie manuelle depuis l'explorateur Windows avec les même fichiers que ceux recopiés par l'application : Lotus se lance sans souci. C'est donc bien la copie de l'appli Java qui merde et pas les fichiers qui sont réellement altérés :cry:
 
Que faire ?

n°678255
nerisson
Pic-pic
Posté le 19-03-2004 à 16:28:13  profilanswer
 

Il fo utiliser autre chose qu'un FileReader/FileWriter.
Ces 2 classes servent a lire/ecrire des fichiers texte.


---------------
Light is right
n°678263
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 19-03-2004 à 16:38:42  profilanswer
 

Salut, est-ce-que tu as regardé l'API suivante qui comporte des méthodes utilitaires orientées I/O ?
 
http://jakarta.apache.org/commons/io/
 
En particulier la classe FileUtils


Message édité par machinbidule1974 le 19-03-2004 à 16:39:23
n°678342
Titalium
Posté le 19-03-2004 à 18:18:12  profilanswer
 

nerisson a écrit :

Il fo utiliser autre chose qu'un FileReader/FileWriter.
Ces 2 classes servent a lire/ecrire des fichiers texte.


 
Autre chose oui, mais quoi ?
 

machinbidule1974 a écrit :

Salut, est-ce-que tu as regardé l'API suivante qui comporte des méthodes utilitaires orientées I/O ?
 
http://jakarta.apache.org/commons/io/
 
En particulier la classe FileUtils


 
Je jette un oeil de suite, mais je pourrai rien tester avant Lundi, je suis en WE :) :D

n°679681
Titalium
Posté le 22-03-2004 à 09:59:24  profilanswer
 

Bon, j'ai résolu mon pb avec un FileInputStream et un FileOutputStream de la manière suivante :
 

Code :
  1. public static void copyFileBuffered(final String currentFile, final String newFile) throws FileNotFoundException, IOException {
  2.         FileInputStream in = new FileInputStream(currentFile);
  3.         try {
  4.             FileOutputStream out = new FileOutputStream(newFile);
  5.             try {
  6.                 byte[] byteBuffer = new byte[in.available()];
  7.                 int s = in.read(byteBuffer);
  8.                 out.write(byteBuffer);
  9.                 out.flush();
  10.             } finally {
  11.                 out.close();
  12.             }
  13.         } finally {
  14.             in.close();
  15.         }
  16.     }


 
Ici, je pense que si je passe des fichiers trop gros ça va merder non ? En tout cas, là pour mes fichiers de Lotus, c'est nickel. Merci à tous pour votre aide, c'était super sympa. Vu que je me met petit à petit au Java, je pense qu'on aura l'occasion de se recroiser ;)

n°679721
benou
Posté le 22-03-2004 à 10:30:34  profilanswer
 

Titalium a écrit :

Ici, je pense que si je passe des fichiers trop gros ça va merder non ?


ben oui ... elle est bizarre ta méthode : y  totu pour faire de la bufferisation, mais y en a pas.


---------------
ma vie, mon oeuvre - HomePlayer
n°679726
benou
Posté le 22-03-2004 à 10:35:30  profilanswer
 

Titalium a écrit :

Code :
  1. public static void copyFileBuffered(final String currentFile, final String newFile) throws FileNotFoundException, IOException {
  2.         FileInputStream in = new FileInputStream(currentFile);
  3.         try {
  4.             FileOutputStream out = new FileOutputStream(newFile);
  5.             byte[] buffer = new byte[1024*4];
  6.             // ca peut être bien de rendre la taille du buffer paramétrable
  7.             int nbRead;
  8.             try {
  9.                while ((nbRead = in.read(buffer)) != -1) {
  10.                   out.write(buffer, 0, nbRead);
  11.                }
  12.             } finally {
  13.                 out.close();
  14.             }
  15.         } finally {
  16.             in.close();
  17.         }
  18.     }




---------------
ma vie, mon oeuvre - HomePlayer
n°683551
Titalium
Posté le 25-03-2004 à 10:12:07  profilanswer
 

Merci beaucoup, c'est vrai que c'est mieux comme ça, faut avouer.
 
Maintenant, comment optimiser la vitesse de copie ? C'était plus rapide sans buffer, mais pas compatible avec tout les fichiers. Maintenant c'est compatibles avec tout type de fichiers, mais plus lent (pas beaucoup mais un peu). Comment optimiser ? Je pense que c'est en jouant sur la taille du buffer, mais je sais pas trop dans quel sens il faut aller... Buffer plus grand ? plus petit ?

n°684174
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 25-03-2004 à 17:50:59  profilanswer
 

+ le buffer est gros, + le nb de lectures sur disques pour lire le contenu d'un fichier est petit.
 
Donc en augmentant la taille de ton buffer, tu es censé optimiser la copie vue qu'une opération de type I/O est assez lente...  
 
EN fait, tu dois faire un compromis entre espace mémoire (taille du buffer) / charge CPU (opérations de type I/O). Au pif, un buffer de 256Ko devraient suffire ?

n°684182
nerisson
Pic-pic
Posté le 25-03-2004 à 17:57:36  profilanswer
 

Au dela de quelques Ko de cache ca ne sert plus a rien.
16Ko devrait suffire.


---------------
Light is right
n°684184
machinbidu​le1974
Do you feel lucky, punk ?
Posté le 25-03-2004 à 17:58:40  profilanswer
 

ok, je le note  ;)


Message édité par machinbidule1974 le 25-03-2004 à 17:58:52
n°684223
benou
Posté le 25-03-2004 à 18:47:53  profilanswer
 

Ce que je vois le plus fréquement c'est 1Ko ou 4Ko ...


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java] Copier des fichiers

 

Sujets relatifs
[ C++ ] Un projet, 3 fichiers, #include et ou c'est que je me gourre ?pb vidage contenu fichier en java
URGENT MAJ cle primaire SQL et de tous les fichiers qui la contienneProblème de lecture de fichier avec java
audio et javaSQL Quote Java
Java , comment acceder a une methode d un objet y a un pitit pb.[JAVA] attribution dynamique de nom de variable
[JAVA] Interface : plusieur formulairesMoteur physique en Java
Plus de sujets relatifs à : [java] Copier des fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR