FTP Auflistung von Ordnern/Dateien

Status
Nicht offen für weitere Antworten.

r4zorsharp

Neues Mitglied
Hallo!

Ich hab ein kleines Problem, und zwar habe ich eine Funktion geschrieben mit der der komplette Pfad eines FTP-Servers ausgeben soll. Soweit, so gut. Nur gibt es da 2 kleine Probleme:

1. Das Programm bleibt manchmal einfach stehen, hört also mitten drin auf aufzulisten
2. Wenn ein Ordner null ist bekomme ich einen NullPointer welche ich nicht mit == 0 oder .equals(null) abfangen kann.

Hier die Methoden:

Java:
private JScrollPane createArch() throws IOException {

		DefaultMutableTreeNode top = new DefaultMutableTreeNode("root");
		
		FTPFile[] filetype = ftp.listFiles();
		String[] filenames = ftp.listNames();
		
		for(int i = 0; i < filenames.length; i++){
			System.out.println(i);
			
			if(filetype[i].isDirectory()){
				top.add(getData(filenames[i]));
			} else {
				
				top.add(new DefaultMutableTreeNode(filenames[i]));
			}
				
		}
		
		
		JTree arch = new JTree(top);
		JScrollPane treeView = new JScrollPane(arch);

		return treeView;
	}

Java:
	private DefaultMutableTreeNode getData(String directory) throws IOException{
		
		DefaultMutableTreeNode node = new DefaultMutableTreeNode(directory);
		
		System.out.println(directory);
		
		FTPFile[] filetype2 = ftp.listFiles(directory);
		String[] filenames2 = ftp.listNames(directory);
		
		if(filenames2.length == 0 || filenames2.equals(null)){
		
			for(int i = 0; i < filenames2.length; i++){
				
				if(filetype2[i].isDirectory()){
					
					node.add(getData(filenames2[i]));
				} else node.add(new DefaultMutableTreeNode(filenames2[i]));
			}
		}
		
		return node;
	}


Kann mir jemand einen Tipp geben? Vielen dank schon mal für die Mühe ;)

Greetz
r4zorsharp
 

Leroy42

Top Contributor

musiKk

Top Contributor
Ohne die Implementierung des FTP-Clients zu kennen (woher kommt FtpFile?) wird die erste Frage schwer zu beantworten sein.
 

r4zorsharp

Neues Mitglied
Ich wüsste nicht wie ich es näher beschreiben sollte... Um die Methoden und daher auch meinen
Ansatz für das Problem zu Erklären:

createArch wird aufgerufen und listet den Standardordner auf der angezeigt werden soll sobald auf
den FTP zugegriffen wird. Jede Datei (filetype[]) und der dazugehörige Name(filenames[]) wird dann
in einem Array gespeichert und in eine Schleife geworfen die n mal durchläuft wobei n die Anzahl
der Dateien/Ordner ist die in dem Verzeichnis liegen. Sollte die Datei ein Ordner sein wird getData
aufgerufen, welche dann nach schaut ob in dem Verzeichnis Dateien oder weitere Ordner liegen.
Sollten weitere Ordner vorhanden sein ruft sich die Methode getData wieder selber auf und gibt
somit die komplette Baumstruktur für alle Dateien und Ordner zurück die gefunden wurden.

Um es mal streng nach meiner Ausgabe zu machen kommt damit also z.B.

0
Ordner1/
Ordner1/datei a
Ordner1/Ordner1a/
Ordner1/Ordner1a/datei b
1
Ordner2/datei c
2
datei d

heraus. Sollte jetzt aber der Fehler auftreten, bleibt das Programm willkürlich irgendwo stehen und
listet auch nichts mehr auf, so könnte das z.B. so aussehen:

0
Ordner1/
Ordner1/datei a
Ordner1/Ordner1a/

Der Fehler hat keine Logik, tritt also wie gesagt unwillkürlich auf. Mal kann es Ordner1 sein, mal
Ordner5 und mal gar nicht was natürlich ein sehr schwerer Fehler ist da das Programm später von
mehreren Menschen benutzt werden soll.


if(xyz = null)
So einfach, und doch so schwer... Danke :D


FtpFile...
ist eine Standardklasse von Apache Commons, wenn gewollt kann ich das ganze Programm online
stellen was aber wahrscheinlich eher für Verwirrung sorgt (selbst bei mir, die Klasse ist noch nicht
fertig und daher unstrukturiert...) und auch nicht wirklich nötig ist da das Problem lediglich in diesen
beiden Methoden liegt.
 

endnic

Aktives Mitglied
Hallo

ich habe mal frecher Weise das von oben unverändert übernommen...

leider komme ich damit nicht zu dem gewünschten Ergebnis...

ich habe folgende Ordnerstruktur:

Code:
[Ordner]bilder
[Ordner]jars
[Ordner]usage
[Datei]importexport.html
[Datei]index.html
[Datei]language.html
[Datei]performence.html
[Datei]single.html

Innerhalb der [Ordner] sind noch weitere Unterordner und Datein.

Wenn ich die vorherigen Posts richtig interpretiere soll folgender Codeabschnitt

Java:
if(filenames2.length == 0 || filenames2.equals(null))

mit diesem ersetzt werden:

Java:
if(filenames2 == null

Richtig??

Aber das würde ja bedeuten...das die for-Schleife rein garnix bewirkt, da
Java:
filenames2.length
dann ja auch 0 ist...oder??

Wenn ich das so mache...

erhalte ich folgende Ordnerstruktur in meinem JTree:
Code:
[Ordner].
[Ordner]..
[Ordner]bilder
[Ordner]jars
[Ordner]usage
[Datei]importexport.html
[Datei]index.html
[Datei]language.html
[Datei]performence.html
[Datei]single.html

Woher kommen denn auf einmal die beiden Ordner ganz oben in meiner Liste: :confused:

Code:
[Ordner].
[Ordner]..

Kann mir das jemand erklären??
 

musiKk

Top Contributor
Das sind Links auf das aktuelle und das Elternverzeichnis.

Wenn eine Arrayreferenz null ist, kann kein [c]length[/c] darauf aufgerufen werden (es ist also dann kein Array der Länge 0). Der null-Check muss sofern nötig immer vorher kommen.
 

endnic

Aktives Mitglied
Das sind Links auf das aktuelle und das Elternverzeichnis.

Aso...man hätt ich ja och selber drauf kommen können...danke! :D

Wenn eine Arrayreferenz null ist, kann kein [c]length[/c] darauf aufgerufen werden (es ist also dann kein Array der Länge 0). Der null-Check muss sofern nötig immer vorher kommen.

Aha...okay...und wo muss ich das dann machen in r4zorsharp's Beispielprogramm: :confused:

Java:
	private JScrollPane createArch() throws IOException 
	{	 
        DefaultMutableTreeNode top = new DefaultMutableTreeNode("root");
        
       
        FTPFile[] filetype = client.listFiles();
        String[] filenames = client.listNames();
        Arrays.sort(filenames);
        
        for(int i = 0; i < filenames.length; i++)
        {
        	System.out.println(i);
            
            if(filetype[i].isDirectory())
            {
                top.add(getData(filenames[i]));
            } 
            else
            {
                top.add(new DefaultMutableTreeNode(filenames[i]));
            }
          
        }
        JTree arch = new JTree(top);
        JScrollPane treeView = new JScrollPane(arch);
        treeView.setBounds(new Rectangle(10, 10, 290, 255));
 
        return treeView;
    }
	
	private DefaultMutableTreeNode getData(String directory) throws IOException
	{
	        
		DefaultMutableTreeNode node = new DefaultMutableTreeNode(directory);
	        
		System.out.println("Directory: " + directory);
	       
		FTPFile[] filetype2 = client.listFiles(directory);
		String[] filenames2 = client.listNames(directory);
		Arrays.sort(filenames2);
	        
		//if(filenames2.length == 0 || filenames2.equals(null))    
		if(filenames2 == null)
		{
	        
			for(int i = 0; i < filenames2.length; i++)
			{
				System.out.println(i + " " + filenames2.length);
				
				if(filetype2[i].isDirectory())
				{ 
					node.add(getData(filenames2[i]));
	            } 
				else 
				{
					node.add(new DefaultMutableTreeNode(filenames2[i]));
				}
			}
		}
	        
		return node;
	}

Also bestimmt nicht in Zeile 43 oder?
 

musiKk

Top Contributor
Örm, also wenn [c]filenames2[/c] null ist, gibt es in Zeile 46 auf jeden Fall eine NPE. Der null-Check müsste [c]filenames2 != null[/c] sein. Der Rest stimmt dann. Das zitierte [c]if(filenames2.length == 0 || filenames2.equals(null))[/c] ist jedenfalls völliger Quark.
 

endnic

Aktives Mitglied
Danke...aber das mit dem
Java:
if(filenames2 != null)
habe ich auch schon probiert...dann ratert das programm aber endlos und ich erziele kein Ergebnis... ;(
 

endnic

Aktives Mitglied
soooo....ich habe das Problem gelöst...

folgende Änderungen habe ich vorgenommen...

[JAVA=50]if(filetype2.isDirectory())
[/code]
in das geändert
[JAVA=50]if(filetype2.isDirectory() && !(filenames2.endsWith(".") || filenames2.endsWith("..")) )[/code]

...das war das Problem das die "Links" auf das aktuelle und das Elternverzeichnis als Ordner angesehen wurden und in diesen Ordnern wieder Ordner mit Links aufs aktuelle und das Elternverzeichnis drin waren usw. usw. -------> folglich war das eine Endlosschleife...

in meiner If-Anweisung schließe ich die beiden Ordner jetzt aber aus...und deshalb erreiche ich jetzt mein gewünschtes Ergebnis... :toll:

Danke für die Hilfe... :applaus:
 

faetzminator

Gesperrter Benutzer
Java:
!(filenames2[i].endsWith(".") || filenames2[i].endsWith("..")
bewirkt das gleiche wie
Java:
!filenames2[i].endsWith(".")
Aber eine Datei, welche mit [c].[/c] aufhört ist grundsätzlich ganz legal. Besser wär da
Java:
!filenames2[i].matches("\\.+")
damit werden Einträge, welche nur aus Punkten bestehen, ignoriert.
 

endnic

Aktives Mitglied
Java:
!(filenames2[i].endsWith(".") || filenames2[i].endsWith("..")
bewirkt das gleiche wie
Java:
!filenames2[i].endsWith(".")
Aber eine Datei, welche mit [c].[/c] aufhört ist grundsätzlich ganz legal. Besser wär da
Java:
!filenames2[i].matches("\\.+")
damit werden Einträge, welche nur aus Punkten bestehen, ignoriert.


...leider funktioniert das ganze nicht so...weil:

immer der Pfad als Ordnerbezeichnung fungiert...bsp:

Ein [Ordner] Bilder hat einen unter [Ordner] Bilder2:

Erstellt mein Programm für den Unterordner Bilder2 einen
Code:
TreeNode
heißt dieser ----> [Bilder/Bilder2]

Da Bilder2 aber leer ist wird ans JTree dann aber zurückgegeben als Ordnerbezeichnung [Bilder/Bilder2/..]
in Bilder2 ist nichts vorhanden...ausser der OrdnerLink zum Elternverzeichnis also ebenfalls [Bilder/Bilder2/..] und in diesem ist ebenfalls wieder [Bilder/Bilder2/..] was uns zurück in die Endlosschleife wirft...
 

faetzminator

Gesperrter Benutzer
Das nennt sich Regex und kommt ursprünglich aus der Sprache Perl. Regex ist die Abkürzung für Regular Expression, was so viel wie regulärer Ausdruck heisst.
 

musiKk

Top Contributor
Also Perl mag für Regex sehr bekannt sein, aber reguläre Ausdrücke gibt es schon viel länger.
 

Timberwolf

Mitglied
Moin Moin,

ich habe mich auch mal an diesem Stück Code versucht und muss mich erstmal bei euch allen hier bedanken a) das ihr hier so gut helft und b) danke für den Codeschnipsel....hat mich ein stück weiter gebracht.

Jetzt aber mal fix zu meinem Problem.

Ich verwende den Code wie oben dargestellt nur bekomme ich es ums verrecken nicht hin den Code so umzustricken das ich nicht nur ein verzeichnis habe sondern alle verzeichnisse(auch Child - Verzeichnisse siehe Abb.1 ) meines FTP Servers.

Abb. 1

Root
|
-----Ordner 1
|​
-----Ordner 2​


Es geht mir nicht um die Dateien sondern lediglich um die Verzeichnisse... hab das Gefühl die Lösung vor augen zu haben sie aber nicht zu sehen.

Danke wenn ihr mir helfen könnt..

Nächtliche Grüsse
 

faetzminator

Gesperrter Benutzer
Du darfst einfach keinen [c]add()[/c] auf die Liste machen, wenn [c]isDirectory()[/c] nicht zutrifft, und du erhälst die Dateien nicht.
 

Timberwolf

Mitglied
da war es mal wieder... den Walt vor lauter Bäumen nicht gesehen...

Danke....

jetzt muss ich nur noch klären warum der JTree mir meine Ordner als Datein anzeigt... :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Regexp einer Auflistung Java Basics - Anfänger-Themen 9
L Auflistung aller Fonts Java Basics - Anfänger-Themen 2
S Auflistung wie bei VB Java Basics - Anfänger-Themen 13
B Input/Output File.length() gibt bei vielen Ordnern 0 zurück Java Basics - Anfänger-Themen 9
P Dateigröße von Ordnern ermitteln Java Basics - Anfänger-Themen 8
W Inhalt einer Datei aus mehreren Ordnern auslesen Java Basics - Anfänger-Themen 4
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
J Dateien lesen und schreiben Java Basics - Anfänger-Themen 5
B Jar Dateien ohne IDE verwenden? Java Basics - Anfänger-Themen 1
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
A Zwei XML-Dateien Mergen Java Basics - Anfänger-Themen 14
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
LetsSebi Dateien werden nicht in Zip gespeichert Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
MiMa log4j als separate Dateien in Schleife? Java Basics - Anfänger-Themen 6
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
S Lese- / Schreibfähigkeit von Dateien sicherstellen Java Basics - Anfänger-Themen 1
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
MiMa Formate für Dateien und Pfade? Java Basics - Anfänger-Themen 1
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
L Richtige Reihenfolge der Dateien Java Basics - Anfänger-Themen 5
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
J Logging erzeugt zwei dateien.... Java Basics - Anfänger-Themen 7
A Dateien Verschieben Java Basics - Anfänger-Themen 1
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
C Methoden Dateien im Ordner anzeigen Java Basics - Anfänger-Themen 12
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
E FTP Dateien hochladen Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
Korvinus Vergleichen von 2 csv-Dateien Java Basics - Anfänger-Themen 2
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
M "substring()" mit Dateien und Pfadangaben Java Basics - Anfänger-Themen 5
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
P Einen Ordner mit Dateien hochladen [FTP] Java Basics - Anfänger-Themen 2
X Dateien direkt hintereinander schreiben, Dateiname Java Basics - Anfänger-Themen 25
G Messwerte in 2 Dateien schreiben Java Basics - Anfänger-Themen 20
C Verarbeitung von sehr großen Dateien Java Basics - Anfänger-Themen 52
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
T .jar Datei als Ordner benutzen/ Dateien aus .jar Datei auslesen Java Basics - Anfänger-Themen 3
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
Bluedaishi for schleife um Dateien wieder zusammen zu fügen Java Basics - Anfänger-Themen 11
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
J Dateien für anderen User "mitgeben" Java Basics - Anfänger-Themen 1
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
E Dateien werden nicht gelöscht Java Basics - Anfänger-Themen 10
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
T Fehler beim Schreiben in Dateien! Java Basics - Anfänger-Themen 4
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
K JAR Dateien einbinden - funkt nicht wie es sollte... Java Basics - Anfänger-Themen 22
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
J *.sql Dateien in Java Java Basics - Anfänger-Themen 1
P Dateien im Ordner auflisten. Java Basics - Anfänger-Themen 3
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M Input/Output Arbeiten mit extrem vielen Dateien Java Basics - Anfänger-Themen 8
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
N tar-Dateien Java Basics - Anfänger-Themen 6
B Methoden Dateien konvertieren Java Basics - Anfänger-Themen 3
L Dateien speichern/auslesen Java Basics - Anfänger-Themen 5
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
P Wiedereinstieg und kann keine Dateien mehr öffnen... Java Basics - Anfänger-Themen 13
F Classpath Dateien einbinden und Classpath durchsuchen Java Basics - Anfänger-Themen 2
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
U Best Practice Nicht-permanente Links auf Dateien Java Basics - Anfänger-Themen 5
B In welchem (Default) Pfad erstellt Java Dateien? Java Basics - Anfänger-Themen 4
I Methoden zum lesen und speichern von Dateien Java Basics - Anfänger-Themen 2
B .ut dateien ignorieren und fortsetzen Java Basics - Anfänger-Themen 9
R Ressourcen in JAR-Dateien Java Basics - Anfänger-Themen 2
J jar Dateien global erreichbar machen Java Basics - Anfänger-Themen 3
L Zusammenführen mehrerer .txt Dateien Java Basics - Anfänger-Themen 4
M Dateien erstellen/ bearbeiten/ lesen Java Basics - Anfänger-Themen 9
S Dateien in RAM kopieren und ausführen? Java Basics - Anfänger-Themen 4
O Java Dateien verschlüsseln? Java Basics - Anfänger-Themen 22
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
B Dateien kopieren, entpacken, XML auslesen! Java Basics - Anfänger-Themen 7
B Dateien Verschieben! Java Basics - Anfänger-Themen 8
B ältere Dateien verschieben Java Basics - Anfänger-Themen 3
G Erste Schritte Nach bestimmten Dateien suchen und dann in die Registry schreiben. Java Basics - Anfänger-Themen 6
J Laden von Dateien Java Basics - Anfänger-Themen 19
I Xml dateien zusammenfügen Java Basics - Anfänger-Themen 12
I Dateien in Ordner und Unterordner durchsuchen Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben