listroots ohne Windows meldung

holtiwilan

Mitglied
Hallöle.
Gibt es eine Möglichkeit, das Bereitsein von den ergebnissen, das mit listroots liefert, zu testen, ophne das ich die Windowsmeldung:"Es befindet sich kein Datenträger im Laufwerk" bekomme.

Was ich Vorhabe: Ich will überprüfen, ob in einem Card-Reader eine Karte mit Bildern einer Digicam steckt. Daher überprüfe ich das listroots() ergebniss und schaue ´, ob in einem der Roots das "DCIM" verzeichnis gibt.
Nun bekomme ich aber be jedem start der Methode die Windows (XP) Fehlermeldung.

Code:
String FindCFCard(){
    String CFRoot = null;
    File list[] = File.listRoots();
    for (int i = 0; i < list.length; i++)
      if ((new File(list[i]+"/DCIM")).isDirectory())
        CFRoot = list[i].getPath();
    return CFRoot;
  }

Achja, auch wenn ich statt .isDirectory() .exists() mache kommt die Meldung

DANKE!

Viele Grüsse aus dem Wilden Süden

Tim
 
eine Möglickeit wäre
Code:
File [] roots = File.listRoots();
		for (int i = 0; i < roots.length; i++) {
			if(!roots[i].getName().equalsIgnoreCase("a:")){
				System.out.println(roots[i].getAbsolutePath());
			}
		}
aber vielleicht hat jemand anders noch eine elegantere Lösung, den meine gefällt mir nicht sonderlich..
mfg
elmato
 
Ja, so wollte ich das auch gerade machen.
Denn das ein Chipcard-Reader sich auf A: anmeldet ist ja schon sehr unwahrscheinlich.

So long

Tim
 
Kannst es so machen:
Code:
 import java.io.File;
 
 public class CheckForCard
 {
 
   public CheckForCard() 
   {
 	if( dirExists() )
 	  System.out.println( "Eine Karte ist vorhanden" );
 	else
 	  System.out.println( "Keine Karte vorhanden" );
   }
   
   public boolean dirExists()
   {
 	File roots[] = File.listRoots();
   
 	for ( int i = 0; i < roots.length; i++ ) 
 	{
 	  File[] files = roots[ i ].listFiles();
 	  
 	  if( files == null )
 		continue;
 	  
 	  for ( int j = 0; j < files.length; j++ ) 
 	  {
 		if ( files[ j ].isFile() )
 		  continue;
 		else 
 		  if ( files[j].getPath().contains( "DCIM" ) )
 			return true;
 		  else
 			continue;
 	  }
 	}
 	return false;
   }
   
   public static void main( String[] args ) {
 	CheckForCard unbenannt6 = new CheckForCard();
   }
 }

Was es macht:
Es überprüft, ob ob es auch irgendeinem Laufwerk einen Ordner "DCIM" gibt (ohne den Dialog)..
Wichtig ist :
Code:
	  if( files == null )
  		continue;
Wenn files null ist, gibt es auf dem Laufwerk keine Dateien, vermutlich ist also kein Datenträger eingelegt..

//edit: Ja ja im Konstruktor programmieren ist schlechter Stil, ich weiß :P
 
Zurück