[Java] Connaître l'espace disque disponible

Connaître l'espace disque disponible [Java] - Java - Programmation

Marsh Posté le 29-03-2007 à 15:05:25    

Bonjour,
 
Dans le cadre d'une application de backup décentralisé, je souhaite pouvoir connaître l'espace disque local disponible.  
Cependant, je ne trouve à priori rien dans l'API qui puisse m'aider à connaitre cette quantité. Pire : un des (nombreux) reports effectués auprès de Sun et concernant le sujet indique que, jusqu'il y a peu (sans fournir de nouvelles façons de faire), il était nécessaire de "deviner" l'espace disponible en créant un fichier temporaire de taille variable croissante, jusqu'à la récupération de l'exception adéquate.  
 
Bref, cette façon de faire me semble bien impropre, et je souhaiterai faire appel à votre expérience (séquence lèche :-p) pour pouvoir récupérer cette information.  
 
En vous remerciant d'avance,  
Guybrush

Reply

Marsh Posté le 29-03-2007 à 15:05:25   

Reply

Marsh Posté le 29-03-2007 à 17:36:38    

Java 6, si je ne dis pas de connerie

Reply

Marsh Posté le 31-03-2007 à 17:52:40    

Effectivement, Java 1.6 offre quelques méthodes permettant de retrouver cette information.  
Malheureusement pour moi, je dois me contenter de la 1.5...  
 
A priori, pas de solutions miracles exceptée l'horreur dont je parle dans mon premier post.

Reply

Marsh Posté le 31-03-2007 à 18:33:29    

qui n'est meme pas une solution, c'est juste n'importe quoi :D

Reply

Marsh Posté le 31-03-2007 à 22:44:18    

Programmer en C la fonction puis passer par un appel jni.

Reply

Marsh Posté le 31-03-2007 à 23:13:23    

Runtime.exec() [:spamafote]

Reply

Marsh Posté le 01-04-2007 à 12:03:01    

Trop dépendant de la plate-forme sur laquelle on est... malheureusement :)
Pour l'instant, étant donné que mon principal soucis est de savoir si j'ai assez d'espace disque pour répondre à une certaine requête, je tente la création d'un fichier à la taille indiquée par cette requête, et je catch les erreurs. C'est pas très propre, mais ça me permet de régler temporairement la question.  
(Parce que je ne vous cache pas qu'une application de backup sur un réseau P2P totalement décentralisé n'est pas des plus simples :-D)
 

Reply

Marsh Posté le 01-04-2007 à 13:46:36    

Et à tout a hasard t'es aller voir comment est codé la fonction public long getFreeSpace() de la classe File en java 1.6 ? Ca peut peut être te donner des pistes.

Reply

Marsh Posté le 01-04-2007 à 14:14:38    

Bonne idée tiens ;)
J'vais aller voir ça...

Reply

Marsh Posté le 01-04-2007 à 14:39:20    

Mmmh, mouais... ^^
 

Code :
  1. public long getFreeSpace() {
  2. SecurityManager sm = System.getSecurityManager();
  3. if (sm != null) {
  4.     sm.checkPermission(new RuntimePermission("getFileSystemAttributes" ));
  5.     sm.checkRead(path);
  6. }
  7. return fs.getSpace(this, FileSystem.SPACE_FREE);
  8. }


 
 
fs.getSpace() est abstract, et fs est initialisé via getFileSystem(), malheureusement une méthode interne native...
 

Reply

Marsh Posté le 01-04-2007 à 14:39:20   

Reply

Marsh Posté le 02-04-2007 à 11:38:54    

guybrush02 a écrit :

Trop dépendant de la plate-forme sur laquelle on est... malheureusement :)


[:tartragnan]

 


juste pour info, je viens de tomber sur FileSystemUtils.freeSpace() de commons-io, et ils font exactement comme ça, et si t'es pas sous windows ou unix bah ça te pete a la gueule :D


Message édité par the real moins moins le 02-04-2007 à 11:39:31
Reply

Marsh Posté le 02-04-2007 à 20:52:38    

Pfff.... Ca vaut la peine d'avoir des JVM :ange:  
Enfin... on fera avec, pas le choix ^^  
Je me vois mal faire tourner l'app sur autre chose que du Unix ou w32, de toutes façons ^^


Message édité par guybrush02 le 02-04-2007 à 20:54:03
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed