public HashMap listDir(File dir)
{
HashMap application = null;
File[] files = dir.listFiles();
if (files != null)
{
for (int i = 0; i < files.length; i++)
{
//System.out.print(files[i].getName());
if (files[i].isDirectory()) //Ist file ein Ordner?! Wenn ja wiederhollen
{
listDir(files[i]); //Rekursion - Funktion ruft sich selbst wieder auf
}
mein code oben soll sich immer wieder selbst aufrufen, aber er soll die application nicht wieder auf null setzen.. wie kann ich sowas realisiern??? ich kann ja nochmal den gesammten code der methode einbinden !!!
eine frage noch .. was genau macht putAll einer HashMap
Hi das mit der Helperklasse gefällt mir, woltl ich grad mal probieren
So ist bzw. war meine fehlerhafte Methode
Code:
public HashMap listDir(File dir)
{
HashMap application = null;
File[] files = dir.listFiles();
if (files != null)
{
for (int i = 0; i < files.length; i++)
{
//System.out.print(files[i].getName());
if (files[i].isDirectory()) //Ist file ein Ordner?! Wenn ja wiederhollen
{
listDir(files[i]); //Rekursion - Funktion ruft sich selbst wieder auf
}
else
{
if(application==null)
{
application = new HashMap();
}
String[] name = files[i].getName().split("_"); //Trennt Dateinamen bei einem "_" Unterstrich
String app = name[0]; //Wert vor dem Unterstrich - Applikation
String data = name[1]; //Alles was nach dem Unterstrich kommt
String[] lang = data.split("\\."); //Wert nach dem Unterstrich ohne Dateikürzel - Länderkürzel
HashMap appMap = (HashMap)application.get(app); //Gibt den Value an (appMap) der dem Key (app) zugewiesen ist
if (appMap == null) //Besteht die HasMap appMap noch nicht?
{
appMap = new HashMap(); //Erzeugt neuen Innere HashMap appMap
application.put(app,appMap); //Setzt Key und Value (Applikation und andere HashMap) der äußeren HashMap
}
File dataPath = files[i].getAbsoluteFile();
appMap.put(lang[0],dataPath);
//appMap.put(lang,files[i].getAbsoluteFile()); //Setzt Key und Value (Länderkürzel und Pfad) der innen HashMap
System.out.println("\nApplikation: "+app+" Sprache: "+lang[0]+"\n");
}
}
}
//System.out.println("HASHMAP is Empty? " + application.isEmpty());
return application;
}
UNd so ist/sind sie mit Helperklasse!
Code:
public HashMap listDir(File dir)
{
return listDir(dir, new HashMap());
}
private HashMap listDir(File dir, HashMap ichWerdeDurchgeschleift)
{
File[] files = dir.listFiles();
if (files != null)
{
for (int i = 0; i < files.length; i++)
{
//System.out.print(files[i].getName());
if (files[i].isDirectory()) //Ist file ein Ordner?! Wenn ja wiederhollen
{
listDir(files[i]); //Rekursion - Funktion ruft sich selbst wieder auf
}
else
{
if(application==null)
{
application = new HashMap();
}
String[] name = files[i].getName().split("_"); //Trennt Dateinamen bei einem "_" Unterstrich
String app = name[0]; //Wert vor dem Unterstrich - Applikation
String data = name[1]; //Alles was nach dem Unterstrich kommt
String[] lang = data.split("\\."); //Wert nach dem Unterstrich ohne Dateikürzel - Länderkürzel
HashMap appMap = (HashMap)application.get(app); //Gibt den Value an (appMap) der dem Key (app) zugewiesen ist
if (appMap == null) //Besteht die HasMap appMap noch nicht?
{
appMap = new HashMap(); //Erzeugt neuen Innere HashMap appMap
application.put(app,appMap); //Setzt Key und Value (Applikation und andere HashMap) der äußeren HashMap
}
File dataPath = files[i].getAbsoluteFile();
appMap.put(lang[0],dataPath);
//appMap.put(lang,files[i].getAbsoluteFile()); //Setzt Key und Value (Länderkürzel und Pfad) der innen HashMap
System.out.println("\nApplikation: "+app+" Sprache: "+lang[0]+"\n");
}
}
}
return ichWerdeDurchgeschleift;
}
war das so gemeint??? Sorry ich weiss da echt net bescheid
Du must intern (also innerhalb der Helper-Methode)
natürlich auch wieder die Helper-Methode aufrufen,
da sonst jedesmal eine neue, leere HashMap angelegt wird.
Und außerdem mußt du nur sie natürlich irgendwann füllen.
Code:
public HashMap listDir(File dir, HashMap map) {
for (File f : dir.listFiles())
if (f.isDirectory())
listDir(f, map); // Returnwert braucht nicht beachtet werden da er ja gleich map ist
else
map.put(/*Was auch immer */);
return map;
}
Auf diese Weise brauchst du auch keine externen (Klassen-) Hilfsvariablen.
Alles bleibt für den Anwender der (Nicht-Helper) - Methode schön gekapselt.
Hi das mit der Helperklasse gefällt mir, woltl ich grad mal probieren
So ist bzw. war meine fehlerhafte Methode
Code:
public HashMap listDir(File dir)
{
HashMap application = null;
File[] files = dir.listFiles();
if (files != null)
{
for (int i = 0; i < files.length; i++)
{
//System.out.print(files[i].getName());
if (files[i].isDirectory()) //Ist file ein Ordner?! Wenn ja wiederhollen
{
listDir(files[i]); //Rekursion - Funktion ruft sich selbst wieder auf
}
else
{
if(application==null)
{
application = new HashMap();
}
String[] name = files[i].getName().split("_"); //Trennt Dateinamen bei einem "_" Unterstrich
String app = name[0]; //Wert vor dem Unterstrich - Applikation
String data = name[1]; //Alles was nach dem Unterstrich kommt
String[] lang = data.split("\\."); //Wert nach dem Unterstrich ohne Dateikürzel - Länderkürzel
HashMap appMap = (HashMap)application.get(app); //Gibt den Value an (appMap) der dem Key (app) zugewiesen ist
if (appMap == null) //Besteht die HasMap appMap noch nicht?
{
appMap = new HashMap(); //Erzeugt neuen Innere HashMap appMap
application.put(app,appMap); //Setzt Key und Value (Applikation und andere HashMap) der äußeren HashMap
}
File dataPath = files[i].getAbsoluteFile();
appMap.put(lang[0],dataPath);
//appMap.put(lang,files[i].getAbsoluteFile()); //Setzt Key und Value (Länderkürzel und Pfad) der innen HashMap
System.out.println("\nApplikation: "+app+" Sprache: "+lang[0]+"\n");
}
}
}
//System.out.println("HASHMAP is Empty? " + application.isEmpty());
return application;
}
UNd so ist/sind sie mit Helperklasse!
Code:
public HashMap listDir(File dir)
{
return listDir(dir, new HashMap());
}
private HashMap listDir(File dir, HashMap ichWerdeDurchgeschleift)
{
File[] files = dir.listFiles();
if (files != null)
{
for (int i = 0; i < files.length; i++)
{
//System.out.print(files[i].getName());
if (files[i].isDirectory()) //Ist file ein Ordner?! Wenn ja wiederhollen
{
listDir(files[i]); //Rekursion - Funktion ruft sich selbst wieder auf
}
else
{
if(application==null)
{
application = new HashMap();
}
String[] name = files[i].getName().split("_"); //Trennt Dateinamen bei einem "_" Unterstrich
String app = name[0]; //Wert vor dem Unterstrich - Applikation
String data = name[1]; //Alles was nach dem Unterstrich kommt
String[] lang = data.split("\\."); //Wert nach dem Unterstrich ohne Dateikürzel - Länderkürzel
HashMap appMap = (HashMap)application.get(app); //Gibt den Value an (appMap) der dem Key (app) zugewiesen ist
if (appMap == null) //Besteht die HasMap appMap noch nicht?
{
appMap = new HashMap(); //Erzeugt neuen Innere HashMap appMap
application.put(app,appMap); //Setzt Key und Value (Applikation und andere HashMap) der äußeren HashMap
}
File dataPath = files[i].getAbsoluteFile();
appMap.put(lang[0],dataPath);
//appMap.put(lang,files[i].getAbsoluteFile()); //Setzt Key und Value (Länderkürzel und Pfad) der innen HashMap
System.out.println("\nApplikation: "+app+" Sprache: "+lang[0]+"\n");
}
}
}
return ichWerdeDurchgeschleift;
}
war das so gemeint??? Sorry ich weiss da echt net bescheid
Entscheide dich doch erstmal was du in deiner HashMap eigentlich
speichern willst.
Du schreibst einmal
Code:
application.put(app,appMap);
und ein anderes mal
Code:
appMap.put(lang[0],dataPath);
Dann benutzt du innerhalb deiner Methode ja immer noch
Code:
listDir(files[i]);
anstatt
Code:
listDir(files[i], ichWerdeDurchgeschleift);
Dein gewünschter Code ist nachwievor
Code:
public HashMap listDir(File dir) {return listDir(dir, new HashMap());}
public HashMap listDir(File dir, HashMap map) {
for (File f : dir.listFiles())
if (f.isDirectory())
listDir(f, map); // Returnwert braucht nicht beachtet werden da er ja gleich map ist
else
map.put(/*Was auch immer */);
return map;
}