Copier des fichiers [java] - Java - Programmation
Marsh Posté le 19-03-2004 à 10:41:30
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
Marsh Posté le 19-03-2004 à 10:47:26
'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.
Marsh Posté le 19-03-2004 à 10:48:32
Ba surtout, faut éviter de rendre le lien vers la recherche encore plus invisible 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é...
Marsh Posté le 19-03-2004 à 10:56:28
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.
Marsh Posté le 19-03-2004 à 10:58:37
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
Marsh Posté le 19-03-2004 à 11:02:11
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. |
Koi ??? Il ne te plait pas mon code ???
Marsh Posté le 19-03-2004 à 11:05:23
nerisson a écrit : |
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 ), 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...
Marsh Posté le 19-03-2004 à 11:10:55
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 ?
Marsh Posté le 19-03-2004 à 11:33:05
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.
Marsh Posté le 19-03-2004 à 11:45:46
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
Marsh Posté le 19-03-2004 à 12:02:45
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
Marsh Posté le 19-03-2004 à 12:07:14
Titalium a écrit : |
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
Marsh Posté le 19-03-2004 à 13:16:11
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 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).
Marsh Posté le 19-03-2004 à 14:11:33
Titalium a écrit : |
Essaie de voir la page en cache, ça peut aider à contourner
Marsh Posté le 19-03-2004 à 15:40:23
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
Marsh Posté le 19-03-2004 à 15:48:12
Bon, j'ai trouvé, je passe par :
Runtime.getRuntime().exec("macommande" );
Pas facile tous les jours quand même
Marsh Posté le 19-03-2004 à 15:56:41
Titalium a écrit : Je suis en train de chercher : |
Ah yaisse
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à
Maintenant, pour faire ça, le plus simple est efectivement la méthode que t'as trouvée avec Runtime
Marsh Posté le 19-03-2004 à 16:04:12
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
Que faire ?
Marsh Posté le 19-03-2004 à 16:28:13
Il fo utiliser autre chose qu'un FileReader/FileWriter.
Ces 2 classes servent a lire/ecrire des fichiers texte.
Marsh Posté le 19-03-2004 à 16:38:42
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
Marsh Posté le 19-03-2004 à 18:18:12
nerisson a écrit : Il fo utiliser autre chose qu'un FileReader/FileWriter. |
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 ? |
Je jette un oeil de suite, mais je pourrai rien tester avant Lundi, je suis en WE
Marsh Posté le 22-03-2004 à 09:59:24
Bon, j'ai résolu mon pb avec un FileInputStream et un FileOutputStream de la manière suivante :
Code :
|
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
Marsh Posté le 22-03-2004 à 10:30:34
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.
Marsh Posté le 22-03-2004 à 10:35:30
Titalium a écrit :
|
Marsh Posté le 25-03-2004 à 10:12:07
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 ?
Marsh Posté le 25-03-2004 à 17:50:59
+ 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 ?
Marsh Posté le 25-03-2004 à 17:57:36
Au dela de quelques Ko de cache ca ne sert plus a rien.
16Ko devrait suffire.
Marsh Posté le 25-03-2004 à 17:58:40
ok, je le note
Marsh Posté le 25-03-2004 à 18:47:53
Ce que je vois le plus fréquement c'est 1Ko ou 4Ko ...
Marsh Posté le 19-03-2004 à 10:36:54
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...