Obtenir la taille d'un dossier sans listing

cs_pippo70 Messages postés 4 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 3 avril 2012 - 9 mai 2011 à 16:00
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 12 mai 2011 à 10:24
Bonjour,

Je suis à la recherche d'un moyen pour mesurer la taille d'un dossier sans en faire le listing dans une application java.
En effet cela prend du temps quand le dossier contient quelque milliers de fichier.

Note: le programme tournera sur Windows

J'ai vu que en utilisant un JavaScript ou un VBscript on peut avoir cette information rapidement:

var fso  = new ActiveXObject("Scripting.FileSystemObject");

(javascript)
OU
set fso = WScript.CreateObject("Scripting.FileSystemObject")

(vbscrpit)
puis
fh = fso.GetFolder(...)
size = fh.Size



Cela prend une fraction seconde pour un dossier de 27GB avec 37000 fichiers.

Si il y a un moyen simple ou quelques libraires qui le font déjà ca m'arrangerais.

Est ce que je suis obligé d'utiliser les java Native Interface? Ca me parait un peu complexe.

Merci pour les éventuelles réponses

2 réponses

cs_pippo70 Messages postés 4 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 3 avril 2012
10 mai 2011 à 09:16
Même si c'est assez laid comme façon de procéder, je pense que je vais utiliser la méthode suivante:

Créer un VBscript dans les fichiers temporaires et l'exécuter.

public static long size(String path) throws Exception{

if (!new File(path).isDirectory())
throw new Exception("The input path is not a directory : " + path);

path = path.replaceAll("/", "\");

File file = File.createTempFile("getDirectorySize",".vbs");

file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);

String vbs = "dim fso, oFolder \n" 
+ "set fso = WScript.CreateObject("Scripting.FileSystemObject") \n"
+ "set oFolder = fso.GetFolder("" + path + "") \n"
+ "wscript.echo oFolder.Size \n"
+ "Wscript.quit(0)";
fw.write(vbs);
fw.close();
Runtime run = Runtime.getRuntime();
run.gc();
Process p = run.exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));

String result = input.readLine();
input.close();
file.delete();
return Long.parseLong(result);
}


Si vous avez d'autres suggestions, n'hésiter pas
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 mai 2011 à 10:24
Salut,

dans ce cas oriente tes recherches du coté de JNA et fait directement les appels système depuis java sans passer par je ne sais quoi de vb, sinon tu fais à l'avance une dll qui permet ça et tu fais pointer ton code java dessus via JNI/JNA...




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous