2009-08-19 16 views
2

j'ai essayé le programme suivantlors de l'obtention d'informations d'entraînement en utilisant java

import java.io.*; 
class dr 
{  
    public static void main(String args[]) 
    { 
     try{ 
      File[] roots = File.listRoots();  
      for (int index = 0; index < roots.length; index++)  
      { //Print out each drive/partition   
      System.out.println(roots[index].toString());  
      } 
     } 
     catch(Exception e) 
     { 
     System.out.println("error " +e); 
     } 
    } 
} 

mais dans mon système lecteur de disquette n'est pas connecté et je reçois un message comme le

"suivant Le lecteur est pas prêt Veuillez vérifier le lecteur A: et assurez-vous que le disque est inséré et que la porte du lecteur est fermée " puis trois options sont affichées annuler, essayez à nouveau, continuez quand j'essaye de continuer, cela fonctionne mais comment je pourrais éviter cela msg

Répondre

2

Qu'est-ce que vous essayez de faire? Je recommande d'utiliser FileSystemView.

Il est utilisé quelque chose comme ceci:

FileSystemView fsv = FileSystemView.getFileSystemView(); 
File[] roots = fsv.getRoots(); 
for (File f: roots) { 
    System.out.println(fsv.getSystemDisplayName(f); 
} 
2
package com.littletutorials.fs; 

import java.io.*; 
import javax.swing.filechooser.*; 

public class DriveTypeInfo 
{ 
public static void main(String[] args) 
{ 
    System.out.println("File system roots returned byFileSystemView.getFileSystemView():"); 
    FileSystemView fsv = FileSystemView.getFileSystemView(); 
    File[] roots = fsv.getRoots(); 
    for (int i = 0; i < roots.length; i++) 
    { 
     System.out.println("Root: " + roots[i]); 
    } 

    System.out.println("Home directory: " + fsv.getHomeDirectory()); 

    System.out.println("File system roots returned by File.listRoots():"); 
    File[] f = File.listRoots(); 
    for (int i = 0; i < f.length; i++) 
    { 
     System.out.println("Drive: " + f[i]); 
     System.out.println("Display name: " + fsv.getSystemDisplayName(f[i])); 
     System.out.println("Is drive: " + fsv.isDrive(f[i])); 
     System.out.println("Is floppy: " + fsv.isFloppyDrive(f[i])); 
     System.out.println("Readable: " + f[i].canRead()); 
     System.out.println("Writable: " + f[i].canWrite()); 
     System.out.println("Total space: " + f[i].getTotalSpace()); 
     System.out.println("Usable space: " + f[i].getUsableSpace()); 
    } 
} 

}

Référence: http://littletutorials.com/2008/03/10/getting-file-system-details-in-java/

2

Quand il vient à Windows, ce class WindowsAltFileSystemView propose une alternative basée sur FileSystemView

Cette classe est nécessaire en raison d'un bogue ennuyeux sur Windows NT où l'instanciation d'un JFileChooser avec la valeur par défaut FileSystemView provoquera une erreur "drive A: not ready" à chaque fois.
J'ai attrapé le Windows FileSystemView impl du 1.3 SDK et l'ai modifié ainsi * pour ne pas employer java.io.File.listRoots() pour obtenir des racines de systemSystem.

java.io.File.listRoots()-t un SecurityManager.checkRead() qui provoque le système d'exploitation pour tenter d'accéder au lecteur A: même quand il n'y a pas de disque, ce qui provoque un ennuyeux « abort, retry, ignore » message contextuel chaque fois que nous instancier un JFileChooser!

Voici donc, l'idée est de FileSystemView étend, en remplaçant la méthode getRoots() avec:

/** 
    * Returns all root partitians on this system. On Windows, this 
    * will be the A: through Z: drives. 
    */ 
    public File[] getRoots() { 
     Vector rootsVector = new Vector(); 

     // Create the A: drive whether it is mounted or not 
     FileSystemRoot floppy = new FileSystemRoot("A" + ":" + "\\"); 
     rootsVector.addElement(floppy); 

     // Run through all possible mount points and check 
     // for their existance. 
     for (char c = 'C'; c <= 'Z'; c++) { 
      char device[] = {c, ':', '\\'}; 
      String deviceName = new String(device); 
      File deviceFile = new FileSystemRoot(deviceName); 
      if (deviceFile != null && deviceFile.exists()) { 
       rootsVector.addElement(deviceFile); 
      } 
     } 
     File[] roots = new File[rootsVector.size()]; 
     rootsVector.copyInto(roots); 
     return roots; 
    }