Alle Daten in einen path bekommen? listfiles()?

Status
Nicht offen für weitere Antworten.

vaderle

Mitglied
Ich hab folgendes Problem. Ich hab einen JTree und kann z.B. ein Verzeichnis selektieren mit dem ich was machen will (löschen etc). Ich erhalte aus der Selektierung ein File pathname. Dieses Sende ich an meine Methoden (Löschen etc.). Nun mach ich folgendes um alle Files zu bekommen:
Code:
File files[] = pathname.listFiles(); //Returns an array of abstract pathnames denoting the files in the directory denoted by this abstract pathname.
Jedoch hab ich bemerkt das er mir alle Files in dem Verzeichniss gibt. Wenn in dem Verzeichniss noch ein Verzeichnis mit Daten steckt bekomme ich die darin enthaltenen Daten nicht. Gibt es noch eine andere Methode
 
Mir ist keine bekannt.

Aber du kannst ja die Liste durchgehen, und alle Verzeichnisse (File.isDirectory) nochmals überprüfen.

Code:
public File[] listFiles( File file ){
  Vector vector = new Vector();
  listFiles( file, vector );
  return (File[])vector.toArray( new File[ vector.size() ] );
}

private void listFiles( File file, Vector vector ){
  File[] files = file.listFiles();

  for( int i = 0, n = files.length; i<n; i++ ){
    if( files[i].isDirectory )
      listFiles( files[i], vector );
    else
      vector.add( files[i] );
  }
}
 
Hmm Also erstmal Danke. Stimmt Rekursiv arbeiten ist immer ganz gut. Für was ist der Vecot da? Er wird ja schon bei listFiles(..) benutzt aber hat doch noch gar keinen inhalt bzw wert?!

PS: isDirectory"()" ;-) *nicht böse gemeint*
 
die obere Methode ist sozusagen der "Sammler" - außerdem wird der Vector noch in einen Array umgewandelt... Kann man machen, muss man aber nicht - oder habe ich was übersehen :?:

[EDIT]: Habe erst jetzt gesehen, dass beiden Methoden gleich heißen... also nur eine Überladung (scheinbar)....
 
Hmm kann ich das nicht einfach so machen?
Sieht etwas kürzer aus:
Code:
public static void deleteTree(File pathname) {

	File files[] = pathname.listFiles(); //File Array mit Wurzel pathname

	for (int i = 0; i < files.length; i++) { //von Anfang bis zum Ende des Arrays

	  if (files[i].isDirectory()) { //Wenn File i ein Verzeichniss ist
		deleteTree(files[i]);
	  } // Lösche den Inhalt des Verzechniss
	  files[i].delete();
	}
	pathname.delete(); // Lösche dann noch den pathnamen(Wurzel)

  }
 
Ja, und ich würd gern wissen was das mit AWT oder Swing zu tun hat :?
ich verschieb mal...
 
Hmm alle Daten erreich ich jetzt aber das verschieben der Daten funktioniert nicht ganz so.
folgendes passiert zur Zeit: Habe ich zum Beispiel folgendes Ordner angewählt der folgenden Inhalt hat: Ordner1(txt.datei,Ordner2(jpg.datei)). Also einen Ordner mit einer Datei und noch einen Ordner drin der wiederum eine Datei hat. Wenn ich nun meine Methode anwende erkennt er zwar alle Daten aber er verschiebt alle so das ich alle Daten zusammen in einen Ordner habe. Also so das (Ordner1,txt.datei,Odner2,jpg.datei). Also die Datein sind nicht mehr im Ordner drin sondern liegen nun alle im selber Verzeichniss.

So sieht mei nCode aus:

zuerst hole bekomme ich den selektierten pfad im Tree und hole mir daraus eine Liste der einzelnen Daten
Code:
public static void filecopy(File pathname) {

	File files[] = pathname.listFiles();
	for (int i = 0; i < files.length; i++) {

Danach geht er alles Daten einzeln ab und vergleich ob es ein Verzeichnis ist
Code:
if (files[i].isDirectory()) {

wenn ja soll er zuerst die Methode rekursiv nochmal aufrufen um den Inhalt zu bekommen und danach den Ordner verschieben
hier ist wohl er Fehler da er ja zuerst die Daten im Ordner verschiebt und danach erst dann den Ordner

Code:
		filecopy(files[i]); 

//.....hier kommt nun der Code zum verschieben (outputFile.mkdirs(); damit erkannt wird das es ein Ordner ist)
}

Code:
else {
//.....hier kommt nun fast der gleiche Code zum verschieben (outputFile = new File(files1); weil es ja nun Date ist) 
}
}
 
Ich hab auch mal sowas geschrieben, vielleicht hilft dir ein Vergleich.

Dieser Code verschiebt den Inhalt eines Verzeichnisses (Das Verzeichniss müsste man separat verschieben):
Code:
	public static void main(String[] args) throws InterruptedException {
	    move( new File("e:/temp/begin"), new File("e:/temp/end") );
	}

	public static void move( File src, File dest ){
	    File[] files = src.listFiles();
	    
	    dest.mkdirs();
	    
	    String path = dest.getPath() + File.separator;
	    
	    for( int i = 0; i < files.length; i++ ){
                File original = files[i];
                File moved = new File( path + original.getName() );

	        if( original.isDirectory() ){
	            move( original, moved );
	        }
	        else{
                    // Original in moved kopieren, original löschen
	        }
	    }
	}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben