# Verzeichnis auslesen und alle Unterordner/Dateien speichern



## Gajor (28. Sep 2004)

Nabend!

Möchte gerne alle Unterordner und Dateien eines Ordners einlesen und diese dann speichern.
Hab auch schon was begonnen, nur fehlt mir die grundlegende Idee.
Denn ich weiß nicht wie ich Platz für die Unterverzeichnisse anlegen soll um diese zu speichern und außerdem ist doch auch die Anzahl verschieden.

```
import java.io.*;
public class start
{
	public static void main( String args[] )
	{
	filter isDatei;
	isDatei = new filter();
	String s = "e:\\Musik";
	String erw[]=new String[]{".mp3",".wav"};
	File f[] = new File(s).listFiles();
	speicher feld[]= new speicher[f.length];
	
	int l=f.length;
	for(int i=0;i<l;i++)
		{ 	
		feld[i]=new speicher();	
		if(isDatei.datei(f[i],erw))
			feld[i].saveName(f[i].getPath());
		if(isDatei.verzeichnis(f[i]))
			feld[i].saveOrnder(f[i].getPath());
		}
	for(int i=0;i<l;i++)
		{
		if(feld[i].putName()!=null)
		System.out.println(feld[i].putName());
		}
	for(int i=0;i<l;i++)
		{
		if(feld[i].putOrdner()!=null)
		System.out.println(feld[i].putOrdner());
		}
	}
}


import java.io.*;

public class filter 
{
		static boolean datei(File f,String erw[])
		{
		for(int i=0;i<erw.length;i++)
		{if(f.isFile() && f.getName().endsWith(erw[i])) return true;}
		return false;
		}	
		static boolean verzeichnis(File f)
		{
		if(f.isDirectory())return true;
		else return false;
		}
}

public class speicher {

	public String name;
	public String ordner;
		
	public void saveName(String value)
    {
		name=value;
	}
	public String putName(){
		return name;
	}
	
	public void saveOrnder(String value)
    {
		ordner=value;
	}
	public String putOrdner(){
		return ordner;
	}
}
```

Also das funktionier. Nur die Unterverzeichnisse....???
Will das auch nicht mit zahllosen Unterschleifen und Fileobjekten machen.
Volle vous mich verstehen?

Danke


----------



## meez (28. Sep 2004)

Sowas ???:L



```
public void getRecursive(File basedir, Vector files) {
    File[] f = basedir.listFiles();
     for (int n=0;n<f.length;n++) {
       files.add(f[n].getName());
       if (f[n].isDirectory()) {
            getRecursive(f[n], files);
       }
    }
}
```

Aufrufen kannst du es so:


```
pubic void funktion() {
   Vector files = new Vector(50);
   getRecursive(new File("<basiserzeichnis>"), files);

   //Ab hier hast du dann einen gefüllten Vector mit Strings 
   //Oder wenn du lieber ienen Array hast, das folende ausklammern:
  //String[] filesanddirs = (String[]) files.toArray(new String[files.size()]);


}
```


----------



## Gajor (29. Sep 2004)

Danke. Hast das schon verstanden. So gehts.
Habe vorher nicht wirklich was über Vektoren gewusst,was die Sache jetzt ziemlich erleichtert.
Hatte auch schon die Idee das File[] Objekt immer wieder neu zu initialisieren, nur hat das bei mir nicht wirklich geklappt.
Bin jetzt dabei,das übersichtlich auszugeben. Bzw. erst die Ordner und dann auf Wunsch die Dateien...


----------



## FileReader (30. Apr 2005)

hi...
möchte auch gerne einen verzeichnisbaum auslesen, und habe die rekursive funktion ausprobiert.

mein code sieht folgend aus:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import java.util.*;
import java.io.*;


public class ReadFiles{
	
	public void getRecursive(File basedir, Vector files) {
	    File[] f = basedir.listFiles();
	     for (int n=0;n<f.length;n++) {
	       files.add(f[n].getName());
	       if (f[n].isDirectory()) {
	            getRecursive(f[n], files);
	       }
	    }
	} 
	
	public void main() {
		Vector files = new Vector(500);
   		getRecursive(new File("d:\\vinyls\\mp3"), files);
		
		System.out.println("d:\\vinyls\\mp3");
		
   		//Ab hier hast du dann einen gefüllten Vector mit Strings
   		//Oder wenn du lieber ienen Array hast, das folende ausklammern:
		//String[] filesanddirs = (String[]) files.toArray(new String[files.size()]);


	} 
	
}
```


nun bekomme ich jedoch eine fehlermeldung mit der ich nicht viel anfangen kann...


```
D:\java\vd>javac ReadFiles.java

D:\java\vd>java ReadFiles
Exception in thread "main" java.lang.NoSuchMethodError: main
```

was mache ich denn da falsch!?
danke für jede hilfe...


----------



## mic_checker (30. Apr 2005)

Mach :


```
public static void main(String[] args) {
...
}
```

Allerdings musst du die andere Methode dann auch noch static machen.

Aber was anderes: Finds ja echt mal gut das hier jemand die Suchfunktion benutzt hat  :toll:

edit:
den letzten teil hab ich hinzugefügt - hast deinen beitrag abgeschickt während ich am editieren war....


----------



## Gast (30. Apr 2005)

yeah  danke... dann muss die andere funktion auch static, so wie es ausschaut...


----------



## smokie (6. Mai 2005)

hi!
wenn das jetzt bei dir funzt, könntest du dann evtl. nochmal deinen kompletten code posten ?
habe ein ähnliches problem.


----------



## mic_checker (6. Mai 2005)

Der Code steht doch oben, nur das du die Signatur von main etwas ändern musst etc.


----------



## smokie (9. Mai 2005)

jo, programm läuft bei mir.
kann man evtl. einen jfilewriter anlegen mit dem man ein verzeichnis aussuchen kann in dem man die daten speichert?
wie sähe das dann aus? (bin noch java-anfänger)


----------



## mic_checker (9. Mai 2005)

Ich geh mal davon aus du meinst nen JFileChooser....Guck z.B. mal hier


----------

