Ce code se lance en arrière plan et vérifie en permanence si une clef USB est connectée à l'ordinateur et, si c'est le cas il scanne tous les dossiers de la clef et copie les fichiers avec une certaine extention sur le disque dur dans un dossier spécifié au lancement et la copie ne commence qu'aprés un certain temps, ce qui évite de recopier toutes les clefs branchées. Les paramètres concernant les extentions et les dossiers sont à passer en argument au lancement.
Au départ j'ai créé ce code pour recopier les fichiers powerpoint que mes prof utilisaient à la fac quand ils ne voullaient pas nous filer de photocopies.
Source / Exemple :
import java.util.*;
import java.io.*;
public class USBDaemon implements Runnable {
static Boolean USBConnect = false;
static Boolean CopieOK = false;
static int compteur = 0;
static int tempo = 0;
static String extention;
static String dossier;
static String dossierSauvegarde;
static String Dossiers[];
public USBDaemon (String arg[]){
this.compteur = 0;
this.tempo = Integer.parseInt(arg[3]);
this.extention = arg[0];
this.dossier = arg[1];
this.dossierSauvegarde = arg[2];
Thread t = new Thread(this);
t.start();
}
public void attente() {
//System.out.println("Recherche dans : "+this.dossier);
File fichierDossier = new File(this.dossier);
if(fichierDossier.isDirectory()){
this.USBConnect = true;
// System.out.println("Clef USB connectée!");
}
else if (this.CopieOK) {
this.USBConnect = false;
this.CopieOK = false;
// System.out.println("Pas de clef USB détectée.");
}
else {
// System.out.println("Pas de clef USB détectée.");
}
}
public void compteur() {
//System.out.println("Vérification supplémentaire.");
File fichierDossier = new File(this.dossier);
if(fichierDossier.isDirectory()){
this.compteur++;
// System.out.println("Toujours connecté");
}
else {
this.USBConnect = false;
this.compteur = 0;
// System.out.println("Déconnecté.");
}
}
public void recherche() {
try {
this.CopieOK = true;
System.out.println("Epluchage des dossiers.");
File fichierDossier;
String contenu[];
File file;
String Temp[];
String FichierACopier[];
this.Dossiers = new String[1];
this.Dossiers[0] = "";
int i = 0;
while (i < Dossiers.length) {
//System.out.println(Dossiers[i]);
fichierDossier = new File(this.dossier+File.separator+Dossiers[i]);
contenu = fichierDossier.list();
for(int j = 0; j < contenu.length; j++){
file = new File(this.dossier+Dossiers[i]+File.separator+contenu[j]);
if(file.isDirectory()){
Temp = new String[Dossiers.length + 1];
for(int k = 0; k < Dossiers.length; k++){
Temp[k] = Dossiers[k];
}
Temp[Dossiers.length] = Dossiers[i]+File.separator+contenu[j];
Dossiers = Temp;
}
}
i++;
}
GregorianCalendar d = new GregorianCalendar();
String time = d.get(Calendar.DAY_OF_MONTH)+"-"+d.get(Calendar.MONTH)+"-"+d.get(Calendar.HOUR)+"-"+d.get(Calendar.MINUTE)+"-"+d.get(Calendar.SECOND);
FileInputStream read;
FileOutputStream write;
byte[] tabLu;
int nbLu;
File destination;
i = 0;
while (i < Dossiers.length) {
fichierDossier = new File(this.dossier+Dossiers[i]);
contenu = fichierDossier.list();
for (int j = 0; j < contenu.length; j++) {
if (contenu[j].indexOf(this.extention) != -1) {
System.out.println("Sauvegarde du fichier : "+this.dossier+Dossiers[i]+File.separator+contenu[j]);
System.out.println("Dans : "+this.dossierSauvegarde+File.separator+time+Dossiers[i]+File.separator+contenu[j]);
destination = new File(this.dossierSauvegarde+File.separator+time+Dossiers[i]+File.separator);
destination.mkdirs();
destination = new File(this.dossierSauvegarde+File.separator+time+Dossiers[i]+File.separator+contenu[j]);
file = new File(this.dossier+Dossiers[i]+File.separator+contenu[j]);
read = new FileInputStream(file);
write = new FileOutputStream(destination);
tabLu = new byte[10240];
while((nbLu = read.read(tabLu)) > 0){
write.write(tabLu,0,nbLu);
}
}
}
i++;
}
this.CopieOK = true;
System.out.println("Fini!");
}
catch ( java.io.FileNotFoundException e) { //102 - 103
}
catch ( java.io.IOException e) { // 107
}
}
public void run() {
while (true) {
try {
if (!this.USBConnect || this.CopieOK) {
this.attente();
Thread.sleep(60000);
}
else if (this.compteur < this.tempo) {
this.compteur();
Thread.sleep(60000);
}
else if (!this.CopieOK) {
this.recherche();
Thread.sleep(60000);
}
}
catch (InterruptedException e) { }
}
}
// java USBDaemon .ppt g: c:\sauvegarde 5
// java USBDaemon .ppt /media/sda1 /dd/sauvegarde 5
public static void main(String arg[]){
USBDaemon start = new USBDaemon(arg);
}
}
Conclusion :
On le lance de cette facon :
java USBDaemon .ppt g: c:\sauvegarde 5
Ce qui signifie qu'on va recopier les fichiers *.ppt, que la clef USB est montée sur le lecteur g:, que les fichiers seront sauvegardés dans le dossier c:\sauvegarde, et que la copie ne commencera qu'aprés 5 min sans débrancher la clef.
Sous windows je conseille de le lancer au démarrage en passant par la base de registre et en utilisant "javaw -jar " au lieu de "java", ça sera totalement invisible.
Sous linux c'est beaucoup plus simple comme toujours^^
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.