Array bleibt leer, wo liegt mein Fehler? Verzeichnisinhalt s

Status
Nicht offen für weitere Antworten.

SBS

Aktives Mitglied
Hallo,

ich habe einen Agent welchen ich zu einem anderen System schicke und dort lasse ich ihn folgende MEthode ausführen um den INhalt eines Verzeichnisses inklusive unterverzeichnissen.

Code:
		protected void getFiles_bk(String directory)
	{
		dir = new File(directory);
		
		if(!dir.exists())
		{
			System.out.println("Fehler: Datei existiert nicht.\n");
			return;
		}
		else
		{
			System.out.println("Sammle infos...");
			
			files_bk = dir.listFiles();
			
			if(temp_vc == null)
			{
				System.out.println("Vector initialisiert.");
				temp_vc = new Vector<File>(files_bk.length);
			}
			else
			{				
				temp_vc.trimToSize();
				temp_vc.ensureCapacity(temp_vc.size()+files_bk.length);
			}
			
			if(files_bk != null)
			{
				for(int i=0; i<files_bk.length; i++)
				{
					if(!files_bk[i].isDirectory())
					{
						temp_vc.add(files_bk[i]);
						//files_bk[i].remove();
					}
				}
				
				System.out.println(files_bk.length+" Dateien aus dem Verzeichnis hinzugefügt.");
				System.out.println("Insgesamt jetzt: "+temp_vc.size());
				System.out.println("Prüfe nun auf weitere Unterverzeichnisse...");
				
				for(int i=0; i<files_bk.length; i++)
				{
					if(files_bk[i].isDirectory())
					{
						getFiles_bk(files_bk[i].toString());
					}
				}
			}
			else
			{
				System.out.println("Das Verzeichnis ist leer.");
				return;
			}
		}
		
		files_bk = new File[temp_vc.size()];
		
		temp_vc.copyInto(files_bk);
		
		temp_vc.removeAllElements();
		temp_vc.trimToSize();
	}

Kurze Erläuterung warum ich dies so umständlich mit Vectoren und dann doch wieder mit arrays mache: Anscheinend geht beim Migrieren des Agenten zu einem anderen System der Vector verloren (ist == null wenn er wieder ankommt) bei einem Array des typs File jedoch nicht - keine ahnung warum, ist im Moment auch erstmal nicht ganz so wichtig.

Wenn ich mir nun den INhalt des Verzeichnisses files_bk ausgeben lasse ist dort nichts drin, length == 0
Aber warum? Es ist sicher wieder irgendwo was ganz einfaches... -.-
 
S

SlaterB

Gast
tja, lokal scheint es bei mir zu funktionieren, bei dir sicherlich auch,

das wars dann mit dem Code, was soll man dazu noch sagen?

wie siehts denn mit den System.out.println's aus, was melden die?
Exceptions?
wird der Dateiname falsch übertragen? (mit System.out.println ausgeben und prüfen)
funktioniert das Programm auf dem Rechner 'dort' lokal mit gleichem Dateinamen?
was sind dort die Ausgaben?
welche ist die erste Stelle bei der es sich unterscheidet?
was passiert dort, welcher Verzeichnisname wird nicht gefunden?

so geht man an die Sachen ran, nicht im Forum 'warum geht das nicht'? ;)
 

SBS

Aktives Mitglied
Moinsen :)

Joa vieles von dem hab ich wohl schon getestet ;)

Seltsam: KEINE Fehlermeldung, nirgends.

Ausgabe auf dem System, nach meinen System.out.printlns sieht so aus

AgletRuntime is requested to get unknown user's certificate

bin hier angekommen
Starte nun verzeichnis Suche
Sammle infos...
Vector initialisiert.
5 Dateien aus dem Verzeichnis hinzugefügt.
Insgesamt jetzt: 4
Prüfe nun auf weitere Unterverzeichnisse...
Sammle infos...
Vector wurde nicht erneut initialisiert!
1 Dateien aus dem Verzeichnis hinzugefügt.
Insgesamt jetzt: 5
Prüfe nun auf weitere Unterverzeichnisse...
Vector: 0
Files_bk: 0
***** Addr: atp://home/ place:
No integrity check because no security domain is authenticated.

Ich habe folgende Vermutung, die aber vielleicht auch falsch sein könnte: In Zeile 47 wird die Rekursion gestartet...startet diese Sofort oder wird erst noch die aktuelle Methode zuende durchlaufen, denn dann würden die letzten Zeilen Probleme verursachen..auch wenn ich fest der Meinung bin, dass die Methode sofort neu aufgerufen wird.

Hm anscheind funktioniert irgendwas beim Wechsel vom anderen System zu diesem nicht richtig..nur ohne Fehlermeldung weiß ich leider (noch) nicht was *hmpf*

Die letzten 2 Ausgabe Zeilen über die Größe stammen übrigends von einer kleinen überprüf-methode
Code:
	protected void is_null()
	{
		if(temp_vc == null)
		{
			System.out.println("Vektor is null");
		}
		else
		{
			System.out.println("Vector: "+temp_vc.size());
		}
		
		if(files_bk == null)
		{
			System.out.println("Files_bk is null");
		}
		else
		{
			System.out.println("Files_bk: "+files_bk.length);
		}

	}
 
S

SlaterB

Gast
mit diesem Log kann man doch schon was anfangen, und ich muss sagen:
hast du das nicht lokal getestet? da dürfte doch genauso 0 rauskommen,
bei mir jedenfalls schon, hatte mich vorhin von den vielen Zwischenmeldungen blenden lassen

zwei generelle Probleme:
Code:
 for(int i=0; i<files_bk.length; i++) 
            { 
               if(files_bk[i].isDirectory()) 
               { 
                  getFiles_bk(files_bk[i].toString()); 
               } 
            }
files_bk muss eine lokale Variable sein, ansonsten wird sie beim Aufruf der Rekursion durch die Unterverzeichnisse im Unterverzeichnis überschrieben!

----------

Code:
files_bk = new File[temp_vc.size()]; 
       
      temp_vc.copyInto(files_bk); 
       
      temp_vc.removeAllElements(); 
      temp_vc.trimToSize();
gehört nicht in die rekursive Operation sondern darf nur EINMAL ganz am Ende aufgerufen werden

im Moment wird dies für ein Unterverzeichnis ausgeführt
und dann im Oberverzeichnis nochmal, aber da ist der Vector ja schon leer, da im Unterverzeichnis geleert

generelles Vorgehen:

Code:
Operation doSomething() {
// prepare
rekursiv(OberItem)
// work afterwards (wie das Array erstellen)
}

Operation rekursiv(Item)
// do do
rekursiv(UnterItem) // rekursiv aufrufen, nicht doSomething!
// do do
}
doSomething wird insgesamt nur einmal durchlaufen

-------

allgemeiner Tipp: du logst zwar schon ne Menge,
wieso aber nicht mehr?
da steht doch dass 5 Dateien gelesen wurden,
dann logge doch einfach an verschiedenen Stellen z.B. den Inhalt des Vectors mit,
ist doch ganz einfach

so siehtst du, wann die Daten verloren gehen
 

SBS

Aktives Mitglied
Vielleicht habe ich nicht ganz verstanden was du beim ersten Problem meinst, aber, das files_bk überschrieben wird ist "ja nicht schlimm" bzw. eigentlich so gedacht, denn der Inhalt kann ja verloren gehen, dadieser vorher im Vector temp_vc gespeichert wird, und dieser bleibt doch erhalten,
oder hab ich das nicht ganz verstanden?

zum Zweiten, ja du beschreibst das was ich erwähnt habe im vorherigen Posting oder? Reden wir da von der gleichen Sache?

bin grad ein wenig verwirrt, aber auf jeden fall erstmal vielen Dank bei der Problemsuche :)
 
S

SlaterB

Gast
> das files_bk überschrieben wird ist "ja nicht schlimm"

das ist schlimm, derzeit ist es so

Topverzeichnis mit 10 Unterverzeichnissen
-> Schleife
-> Rekursion ersten Unterverzeichnis,
-> dort keine Unterverzeichnisse, irgendwann fertig
-> im Topverzeichnis sollten nun eigentlich noch die weiteren 9 Unterverzeichnisse durchlaufen werden,
da das Array files_bk aber überschrieben wurde, wird abgebrochen
-> 9 Unterzeichnisse nicht berücksichtigt

-----------

was du so genau meintest weiß ich nicht, kann durchaus in die gleiche Richtung gehen,
das Problem sollte aber doch klar sein:
im Unterverzeichnis wird der Vector geleert,
im Oberverzeichnis dann das Array aus dem leeren Vector erstellt

es gibt sicherlich auch Wege, das in nur einer Operation zu lösen,
ganz vage so wie du das selbst beschrieben hattest, ja,
aber das müssen wir ja hier nicht ausdiskutieren,

bastle was lokal funktionierendes, dann schaue ich mir das wieder an falls noch Fragen bestehen,
oder weißt du jetzt generell nicht mehr, wie man mehrere Verzeichnisse rekursiv durcharbeitet?
das ist ja an sich recht simpel,

mit deiner Vorarbeit musst du nun nur noch die Denkfehler ausräumen,
der generelle Workflow scheint dir doch bereits klar zu sein
 

SBS

Aktives Mitglied
Ja, du hast Recht, dieses Problem mit den mehreren Unterverzeichnissen hatte ich garnicht berücksichtigt!
Stimtm natürlich.. hm wie mach ich denn das jetzt mal, naja das überleg ich mir dann mal.

Aber das aktuelle Problem ist erstmal das, das der Vector, wie du ja sagst geleert wird - jetzt hab ichs glaub ich erkannt: Mein Argument, dass ja bereits mitten in der MEthode zur Rekursion gestartet wird (und somit garnicht das Ende der MEthode ausgeführt wird, bis zur allerletzten Ausführung) stimmt ja nicht, denn die Rekursion wird ja nur ausgeführt wenn das aktuelle File ein Verzeichnis ist! Bei Dateien in einem Unterverzeichnis wird alles durchlaufen und somit geht auch der Inhalts des Vectors verloren... hmm anstrengend :D

Gut, ich bastele mal was neues, mal sehn ob das klappt...und dann ist da ja noch das Probleme mit den weiteren unterverzeichnissen, da hab ich spontan keine Idee, hatte mir die ganze Sache generell recht neu und einfach so überlegt, ohne großartig an ein rekursions-konzept zu denken - da mir keins spezielles bekannt ist ;)

Ich probier mal..

Danke vorerst,
Grüße
 

SBS

Aktives Mitglied
Ich bins nochmal,

es funktioniert jetzt soweit ganz gut, leider konnte ich das Problem mit der Rekursion nicht lösen <:( Es werden weiterhin alle weiteren Ordner nicht durchsucht.. Mir ist irgendiwe auch nichts eingefallen wie das gehen soll..
Könnte mir bitte jemand dabei auf die Sprünge helfen?

Die Methode sieht genau so aus wie vorher mit, mit dem Unterschied, dass die Zeilen
Code:
files_org = new File[temp_vc.size()];
		temp_vc.copyInto(files_org);
		temp_vc.removeAllElements();
		temp_vc.trimToSize();
in einer eigenen Methode aufgerufen werden,
nachdem die rekursive Methode fertig ist - klappt wie gesagt soweit auch ganz gut, ich hoffe ich muss da jetzt nicht soviel dran umändern?
 
S

SlaterB

Gast
mein Vorschlag ist wie von Anfang an files_bk als lokale Variable zu definieren,
macht keinen Sinn das weiter zugeben,

gerade bei einer Verschachtelung muss jede Stufe ein paar Informationen für sich behalten
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Mein Array bleibt immer leer????????? Java Basics - Anfänger-Themen 8
N Array, lineare Suche, binäre Suche, Programm bleibt unerwartet stehen... Java Basics - Anfänger-Themen 6
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
EykS 3D Druckdatei basierend auf 3D Array? Java Basics - Anfänger-Themen 3
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
L Gridmuster in einem Array Java Basics - Anfänger-Themen 2
sgtcoopa Array übergeben Schleife Java Basics - Anfänger-Themen 0
B Compiler-Fehler Array aus Objekten übergeben Java Basics - Anfänger-Themen 7
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben