#1 Le 19/03/2007, à 01:11
- misteraph
faire un petit programme qui tri des fichiers
Bonjour, j'ai eu un idée et je voudrai savoir si c'est réalisable.
Je veux creer un petit programme qui tri de façon automatique les fichiers qui arrivent dans un repertoire.
Par exemple si le fichier est un .mp3, alors il va dans le dossier ~/mp3.
Si c'est un .avi, il va dans ~/avi.
Je saurai faire ça en java ou autre mais je serai obligé de le lancer manuellement. Moi je ve que ça se fasse de façon automatique et sans manger toutes les ressources de la machine.
Si vous avec des idées, ça m'interesse !
Merci !
Hors ligne
#2 Le 19/03/2007, à 01:17
- coca25
Re : faire un petit programme qui tri des fichiers
ca serait pas avec un logiciel de telechargement ca ?
la fonction n'existe pas deja dans le logiciel
sinon tu peux utiliser crontab pour planifier le lancement du programme qui va trier
Hors ligne
#3 Le 19/03/2007, à 03:06
- misteraph
Re : faire un petit programme qui tri des fichiers
Merci pour ta réponse.
J'ai finalement fait mon programme en java et j'ai utilisé crontab pour l'executer toutes les 30 minutes.
Hors ligne
#4 Le 19/03/2007, à 05:17
- misteraph
Re : faire un petit programme qui tri des fichiers
Mon programme est fini mais j'ai encore un petit problème. Je copie les fichiers avec ssh entre mes 2 machines. Le probleme, c'est que certains noms de fichiers ont des espace.
J'ai donc insérer avant chaque espace un \.
Ca donne ça : monRepertoire/mon\ Fichier
Le problème c'est que lorsque je lance mon programme avec cette manip, la copie ne se fait pas, alors que la meme commande fonctionne parfaitement dans un terminal. Par contre, je n'ai pas de problèmes avec les noms sans espaces.
Voici la ce qui me permet de lancer ma commande scp :
final Process p = Runtime.getRuntime().exec(commande);
J'espere que j'ai été clair et j'attends votre aide avec impatience !
Hors ligne
#5 Le 19/03/2007, à 11:45
- coca25
Re : faire un petit programme qui tri des fichiers
si tu mets qu'un seul \ dans ta chaine en java, il est interprete par java avant le shell et
"\ " => " "
il faut doubler le \
Hors ligne
#6 Le 19/03/2007, à 12:13
- misteraph
Re : faire un petit programme qui tri des fichiers
C'est déjà ce que j'ai fait.
J'ai fait un System.out.println pour voir si ça commande est bonne. Quand je la copie dans le terminal, ça fonctionne impec !
Regarde mon code :
private String commandMp3="192.168.1.195:/home/misteraph/Desktop/mp3/";
if (nomDecoupe[1].equals(mp3))
{
System.out.println("cest un mp3");
String[] tabEspace=f1.getPath().split(" ");
int nb=tabEspace.length;
String nomFichier="";
int j=0;
for (j=0 ; j<nb-1; j++){
nomFichier=nomFichier+tabEspace[j]+"\\ ";
}
nomFichier=nomFichier+tabEspace[j];
File f2=new File(nomFichier);
System.out.println(f2.getPath());
String commande=scp+" "+f2.getPath()+" "+commandMp3;
System.out.println(commande);
try {
final Process p = Runtime.getRuntime().exec(commande);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Voici ce ue me donne le System.out.println(commande) :
scp /media/EXTERNE/Mp3/mon\ mp3.mp3 192.168.1.195:/home/misteraph/Desktop/mp3/
Dernière modification par misteraph (Le 19/03/2007, à 12:14)
Hors ligne
#7 Le 19/03/2007, à 12:27
- coca25
Re : faire un petit programme qui tri des fichiers
ah la...
mais c'est quoi l'erreur qu'il te sort?
Hors ligne
#8 Le 19/03/2007, à 12:39
- misteraph
Re : faire un petit programme qui tri des fichiers
Bah je n'ai pas d'erreur !
J'en le disque dur de l'autre machine gratter un peu, c'est tout.
Par contre si c'est un nom de fichier sans espace, ça fonctionne très bien.
Je ne trouve pas la solution.
Hors ligne
#9 Le 19/03/2007, à 13:01
- abetsic
Re : faire un petit programme qui tri des fichiers
Salut,
Personnellement j'aurai fait un script shell du genre
#!/bin/bash
for i in *.mp3; do
mv "$i" /destination
done
for i in *.avi; do
mv "$i" /destination
done
les guillemets autour de $i permettent de protéger les noms de fichiers avec des espaces.
Pour une copie en ssh, je sais pas si ton programme java mémorise ton mot de passe, mais pour éviter d'avoir à le taper tu peux utiliser les clefs publiques des machines (c'est bien documenté ce genre de choses)
Voilà
Dernière modification par abetsic (Le 19/03/2007, à 13:02)
Hors ligne
#10 Le 19/03/2007, à 13:36
- coca25
Re : faire un petit programme qui tri des fichiers
pour le java, faudrait récupérer la sortie de la commande, je me rappelle plus trop, je crois que c'est un truc du genre:
p.getErrorStream ()
Hors ligne
#11 Le 19/03/2007, à 13:40
- iuchiban
Re : faire un petit programme qui tri des fichiers
Ou en Ruby :
#!/usr/bin/ruby
system("clear")
Dir.entries("./").each do |fichier|
if fichier.include?(".mp3")
system("mv \"" + fichier + "\" mp3/")
elsif fichier.include?(".avi")
system("mv \"" + fichier + "\" avi/")
elsif fichier.include?(".png")
system("mv \"" + fichier + "\" png/")
else
puts "Pas un fichier à déplacer"
end
end
Bon d'accord y'a moyen d'optimiser mais comme ça, ça déplace les fichiers avec espaces.
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#12 Le 19/03/2007, à 13:48
- misteraph
Re : faire un petit programme qui tri des fichiers
Vous avez raison je me prend peut etre trop la tête avec mon java. Celà dit, ça permettait aussi de la faire tourner sous Windows, et ça interesse pas mal de mes potes.
coca25, je vais essayer ça ce soir.
Hors ligne
#13 Le 19/03/2007, à 13:55
- iuchiban
Re : faire un petit programme qui tri des fichiers
Tu peux installer ruby sous Windows (mais ca prend super longtemps comparé à la version Linux).
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#14 Le 19/03/2007, à 15:35
- misteraph
Re : faire un petit programme qui tri des fichiers
Bon j'ai réussi !
Il fallait utiliser un tableau de String au lieu d'un String.
if (nomDecoupe[1].equals(mp3))
{
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec(new String[] {scp, f1.getPath(), commandMp3 } );
} catch (IOException e) {
e.printStackTrace();
}
}
Dernière modification par misteraph (Le 19/03/2007, à 15:35)
Hors ligne
#15 Le 19/03/2007, à 20:20
- misteraph
Re : faire un petit programme qui tri des fichiers
Mon programme fonctionne parfaitement mais bouffe beaucoup de ressources.
Je me suis dit que c'était parce que je faisais un nouveau scp à chaque fichier.
J'ai donc decidé de faire un tableau de chaine de caractères :
chaine[0]=fichier1
chaine[1]=fichier2
chaine[1]=fichier3
ainsi à la fin je ferai un "scp chaine[0] chaine[0] chaine[0] 192.168.1.195:/home/misteraph/Desktop/"
Voici mon code :
if (chaine1[0]!=""){
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec(new String[] {scp, chaine1[0], commandMp3});
} catch (IOException e) {
e.printStackTrace();
}
}
Seulement ce code est faux, car là je ne mets que chaine1[0]
Je voudrais que le nombre de paramètres varient en fonction de la longueur de mon tableau de nom de fichiers.
Ainsi, si la longueur est 2, je voudrai :
runtime.exec(new String[] {scp, chaine1[0], chaine1[1], commandMp3});
Si elle est à 5, je voudrais :
runtime.exec(new String[] {scp, chaine1[0], chaine1[1], chaine1[2], chaine1[3], chaine1[4], commandMp3});
Etc...
Ca dépasse complètement mes compétences et donc j'aimerai de l'aide pour réussir à finir mon programme.
Merci d'avance !
Hors ligne
#16 Le 19/03/2007, à 21:14
- coca25
Re : faire un petit programme qui tri des fichiers
il faudrait utiliser une ArrayList, y mettre les fichiers, puis la transformer en tableau avec la méthode: ToArray()
Hors ligne
#17 Le 19/03/2007, à 21:33
- misteraph
Re : faire un petit programme qui tri des fichiers
Merci pour ta réponse.
Je n'ai pas le niveau et donc j'ai du mal à voir ce que tu veux dire.
Est-ce que ça te derangerais de m'écrire un petit bout de code pour m'aider à comprendre ?
Hors ligne
#18 Le 19/03/2007, à 22:02
- coca25
Re : faire un petit programme qui tri des fichiers
je suis pas pro de java mais ca doit ressembler à ca:
ArrayList fichiers = new ArrayList ();
fichiers.add (scp);
fichiers.add (fichier1);
fichiers.add (fichier2);
fichiers.add (commandMp3);
String[] s;
Object[] tab = list.toArray (s);
Dernière modification par coca25 (Le 19/03/2007, à 22:04)
Hors ligne
#19 Le 19/03/2007, à 22:45
- misteraph
Re : faire un petit programme qui tri des fichiers
mais apres, comment je peux appeler ma fonction ?
runtime.exec(tab);
???
Merci encore pour tes conseils.
Hors ligne
#20 Le 19/03/2007, à 23:00
- coca25
Re : faire un petit programme qui tri des fichiers
runtime.exec ((String[]) tab);
Hors ligne
#21 Le 19/03/2007, à 23:19
- misteraph
Re : faire un petit programme qui tri des fichiers
Merci pour ta réponse. J'ai essayé et je me suis retrouver un des NullPointerException, et c'est trop pour moi.
Je ne comprends pas ça non plus :
String[] s;
Object[] tab = list.toArray (s);
Le list, il vient d'où ?
Et il râle parce que le s n'est pas initialisé. Quand je l'initialise à "null", j'ai encore un NullPointerException.
Dernière modification par misteraph (Le 19/03/2007, à 23:25)
Hors ligne
#22 Le 19/03/2007, à 23:49
- coca25
Re : faire un petit programme qui tri des fichiers
le list, je me suis gourré, c'est fichiers, le tableau que tu auras préalablement rempli par la commande, la liste des fichiers et le repertoire de destination.
la j'ai pas d'environnement java, je testerais demain.
le code c'est de tete, toArray a besoin d'un argument pour prendre le type du tableau, mais il faut peut etre qu'il soit initialisé:
essaye:
String[] tab = (String []) fichiers.toArray (new String[fichiers.size ()]);
Hors ligne
#23 Le 20/03/2007, à 15:00
- tekman54000
Re : faire un petit programme qui tri des fichiers
franchement tu devrai faire un petit script TCSH ca irai bcp plus vite et ca sera un ptit peu plus performant que l'usine a gaz de sun
Je vais peut etre en faire un petit si j'ai le temps parce que il y a 2-3 jours je pensais faire pareil lol...
------------------------------------------------------------------------------------------------
"The day Microsoft makes something that doesn’t suck is probably the day they start making vacuum cleaners" Ernst Jan Plugge
------------------------------------------------------------------------------------------------
Hors ligne