Bonjour,
je vous explique mon problème :
j'ai une fonction qui extraie toutes les archives d'un répertoire (elle marche).
je suis dans une appli web du coup je l'ai mis dans un Thread pour que l'extraction se lance en asynchrone.
je voudrais faire un test pour que si dans le dossier qui a été extraite un fichier est supprimé alors j'extraie seulement celui là. mon code marche si un dossier extraite est supprimé mais pas si un fichier du dossier est supprimé.
je sais pas si je me suis bien exprimé. dans l'état si un dossier est supprimé entre temps et que l'utilisateur actualise la page alors seulement ce dossier est extraite à nouveau. je voudrais que ça fasse la même chose pour les fichiers du dossier extraite.
donc en gros si un dossier est supprimé alors je l'extraie à nouveau (seulement celui-là)
et si c'est un fichier qui est supprimé alors je l'extraie à nouveau (seulement ce fichier qui sera dans le bon dossier une fois extraite)
c'est la fonction qui cherche tous les fichiers (je l'utilise pour chercher toutes les archives du répertoire) :
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 /** * Methode qui permet de parser un repertoire et de retrouver ses fichiers */ private static void findFilesRecursively(File file, Collection<File> all, final String extension) { // Liste des fichiers correspondant a l'extension souhaitee final File[] children = file.listFiles(new FileFilter() { public boolean accept(File f) { return f.getName().endsWith(extension); } } ); if (children != null) { // Pour chaque fichier recupere, on appelle a nouveau la methode for (File child : children) { all.add(child); findFilesRecursively(child, all, extension); } } }
c'est la fonction qui permet l'extraction :
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 public void extraireToutZip() { byte[] buffer = new byte[1024]; try { final Collection<File> all = new ArrayList<File>(); findFilesRecursively(new File("C:\\Users\\moi\\Desktop\\bilans batch satelit 2016"), all, ".zip"); for (File file : all) { System.out.println(file.getName()); ZipInputStream zis = new ZipInputStream(new FileInputStream(file)); ZipEntry ze = zis.getNextEntry(); while (ze != null) { String fileName = ze.getName(); File newFile = new File(file.getParentFile() + File.separator + fileName); // je vérifie si le fichier existe déjà pour ne pas l'extraire à nouveau if (!newFile.exists()) { System.out.println("Extraction du fichier : " + newFile.getAbsoluteFile()); if (ze.isDirectory()) { String temp = newFile.getCanonicalPath(); new File(temp).mkdir(); } else { FileOutputStream fos = new FileOutputStream(newFile); int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); } } else { System.out.println("Déjà extraite !"); break; } ze = zis.getNextEntry(); } zis.closeEntry(); zis.close(); System.out.println("Extraction complétée"); } } catch (IOException ex) { ex.printStackTrace(); } }
voilà. dites-moi si vous avez pas compris
j'espère l'aide de quelqu'un
merci d'avance
Partager