Datei-Manager programmieren

Status
Nicht offen für weitere Antworten.

SebiB90

Top Contributor
Code:
int index1=s.indexOf(' '); 
                 int index2=s2.indexOf(' '); 
                 String t=s.substring(0, index1); // <-fehler ensteht hier, weil index1 = -1
                 String t2=s2.substring(0,index2);
wieso suchst du hier ein leerzeichen bzw den index von einem leerzeichen?
du musst gucken wie lang die zahl ist.
vllt. per for schleife den string durchgehen und kontrollieren bis isDigit() = false
 

Sindbad1983

Top Contributor
naja..ich hätt ma eigentlich gedacht, dass die Idee nicht so schlecht ist
weil wie du unten siehst, können Zahlen auch davor stehen

z.B.
abc
2 abc
100 abc

ich such immer bis zum Leerzeichen, lass mir dann die Zahl zurückgeben, vergleich die beiden Zahlen und dann werden sie sortiert..eigentlich müsste das funktionieren..


Fri Apr 01 07:00:00 CEST 2005 [DIR]
100 abc Fri Apr 01 08:00:00 CEST 2005 [DIR]
file 1 in dir Fri Apr 01 08:00:01 CEST 2005 (10 bytes)
file 2 in dir Fri Apr 01 08:00:02 CEST 2005 (20 bytes)
20 abc Fri Apr 01 08:01:00 CEST 2005 [DIR]
3 abc Fri Apr 01 08:02:00 CEST 2005 [DIR]
abc Fri Apr 01 08:03:00 CEST 2005 [DIR]
file 1 in dir Fri Apr 01 08:03:01 CEST 2005 (30 bytes)
file 2 in dir Fri Apr 01 08:03:02 CEST 2005 (40 bytes)
3 abc.txt Fri Apr 01 08:04:00 CEST 2005 (10 bytes)
20 abc.txt Fri Apr 01 08:05:00 CEST 2005 (20 bytes)
100 abc.txt Fri Apr 01 08:06:00 CEST 2005 (30 bytes)
 

SebiB90

Top Contributor
aber in deinem beispiel fehlt das leerzeichen zwischen zahl und dem rest. index1 = -1 weil es kein leerzeichen gibt und dann die methode -1 zurück gibt wenn er nix findet.

und sollen dateien im unterverzeichniss nach dem ordner sofort ausgegeben werden? wenn ja dann wird es irgendwie unübersichtlich wenn man nicht den pfad dazu angibt.
 

Sindbad1983

Top Contributor
aja...sorry..habs grad gesehen..mein fehler! :oops:

hab das leerzeichen vergessen;


Node <Date> datei1=new FileNode<Date>("2 bat",100);
Node <Date> datei2=new FileNode<Date>("3 kat",100);


2 bat3 kat
Drücken Sie eine beliebige Taste . . .


Spitze!!Es geht! nur den Verzeichnisnamen gibt er nicht aus! :cry:
 

SebiB90

Top Contributor
ich weiß jetzt warum
du musst nach dem erstellen des buffers
Code:
sb.append(getName());
machen
 

SebiB90

Top Contributor
weil halt auch der name des ordners in den string muss und damit fügst du den namen in den string ein
 

Sindbad1983

Top Contributor
also das geht perfekt:

Code:
import java.util.*;

public class TestNode{

	public static void main(String [] args){

		


		DirectoryNode <Date> verzeichnis1=new DirectoryNode<Date>("abc ");
		DirectoryNode <Date> verzeichnis2=new DirectoryNode<Date>("bcd ");

		Node <Date> datei1=new FileNode<Date>("2 bat ",100);
		Node <Date> datei2=new FileNode<Date>("3 kat ",100);
		Node <Date> datei3=new FileNode<Date>("4 jat ",100);



		verzeichnis1.addElem(datei1);
		verzeichnis1.addElem(datei2);
		verzeichnis2.addElem(datei3);


		System.out.println(verzeichnis1.toString());
		System.out.println(verzeichnis2.toString());



	}


}


Ausgabe:

abc 2 bat 3 kat
bcd 4 jat
Drücken Sie eine beliebige Taste . . .


da hingegen passt die Reihenfolge nicht:



Code:
import java.util.*;

public class TestNode{

	public static void main(String [] args){




		DirectoryNode <Date> verzeichnis1=new DirectoryNode<Date>("abc ");
		DirectoryNode <Date> verzeichnis2=new DirectoryNode<Date>("bcd ");

		Node <Date> datei1=new FileNode<Date>("2 bat ",100);
		Node <Date> datei2=new FileNode<Date>("3 kat ",100);
		Node <Date> datei3=new FileNode<Date>("4 jat ",100);



		verzeichnis1.addElem(verzeichnis2);
		verzeichnis2.addElem(datei3);
		verzeichnis1.addElem(datei1);
		verzeichnis1.addElem(datei2);


		System.out.println(verzeichnis1.toString());
		System.out.println(verzeichnis2.toString());



	}


}

Ausgabe:

abc 2 bat 3 kat bcd 4 jat
bcd 4 jat
Drücken Sie eine beliebige Taste . . .
:cry:

weiß jemand warum?
 

SebiB90

Top Contributor
das ist auch klar.
verzeichnis2 ist im verzeichnis1 und auch die datei im unterverzeichnis wird ausgegeben.
also wird auch verzeichnis2 ausgegeben
danach gibts du nochmal verzeichnis2 aus und deswegen die doppelung. also nur das hauptverzeichnis toString() und print() machen.
 

Sindbad1983

Top Contributor
ja..das stimmt, aber die Reihenfolge passt trotzdem nicht!


denn bei:

Code:
import java.util.*;

public class TestNode{

	public static void main(String [] args){




		DirectoryNode <Date> verzeichnis1=new DirectoryNode<Date>("bcd ");
		DirectoryNode <Date> verzeichnis2=new DirectoryNode<Date>("ecd ");

		Node <Date> datei1=new FileNode<Date>("4 bat ",100);
		Node <Date> datei2=new FileNode<Date>("2 kat ",100);
		Node <Date> datei3=new FileNode<Date>("3 jat ",100);



		verzeichnis1.addElem(verzeichnis2);
		verzeichnis1.addElem(datei1);
		verzeichnis1.addElem(datei2);



		System.out.println(verzeichnis1.toString());




	}


}

gibt er :


bcd 2 kat Laenge:100 4 bat Laenge:100 ecd
Drücken Sie eine beliebige Taste . . .

statt

bcd ecd 2kat 100....... aus!!!
 

SebiB90

Top Contributor
fehler liegt in der compareTO METHODE
Code:
if (this instanceof DirectoryNode && !(n instanceof FileNode)){ 
          return -1; 
       } 
       else if(!(this instanceof FileNode) && n instanceof DirectoryNode) { 
          return 1; 
       }
da stimmt doch was nicht. wenn das ein ordner ist und n keine Datei ist dann return -1????
dat muss heißen wenn das ein ordner ist und n eine Datei ist dann return -1
das gleiche dadrunter also
Code:
if (this instanceof DirectoryNode && n instanceof FileNode){ 
          return -1; 
       } 
       else if(this instanceof FileNode && n instanceof DirectoryNode) { 
          return 1; 
       }
 

SebiB90

Top Contributor
-1 bedeutet kleiner als das object das angegeben wurde
1 bedeutet größer als das object das angegeben wurde
0 beide sind gleich

und es wird von klein nach groß sortiert also ist deine aussage richtig
 

SebiB90

Top Contributor
und jetzt noch zeilenumbrüche einbauen in die ausgabe, denn alles in einer reihe sieht nicht sxchön aus und noch die anderen daten hinzufügen wie im beispiel,also letzte änderung und größe
 

Sindbad1983

Top Contributor
wahnsinn!!!

Danke Mann, es funktioniert einwandfrei!
Hab noch ein bissl was ausprobiert und getestet bzw. verbessert!
Jetzt checkt er auch die meisten Spezialfälle!

Jetzt wär halt noch TEIL B interessant...aber das werd ich heut wohl nicht mehr schaffen; :roll:

Bin schon froh, dass TEIL A mal halbigs läuft! :applaus:

wo gehört die Methode hin, die den Pfad einliest, etc? in welche Klasse?
oder brauch ich da wieder ne eigene?


da muss ich ja eh nur mehr das lastmodified speichern und dann in der toString-Methode ausgeben oder?
 

SebiB90

Top Contributor
in teil b musst du "nur" die datei auslesen mit name, größe und letzte änderung und alle unterordner auch durchgehen.
ich würd diese methode statisch machen und die in die klasse mit der main methode packen.
und wieso heute nicht mehr geht doch schnell, ich hab doch schon ein kleines beispiel gepostet.
 

Sindbad1983

Top Contributor
ich bin noch hoch motiviert!

:bae:

und jetzt erst ...nach dieser Ausgabe:


abc
ecd
11 fbc Laenge:100
100 abc Laenge:100
100 ebcLaenge:100

gcd
13 ubc Laenge:100
18 zbc Laenge:100
Drücken Sie eine beliebige Taste . . .

:lol:
 

Sindbad1983

Top Contributor
ok..danke nochmal für deine Hilfsbereitschaft heut!
Du hast mir sehr geholfen!

Ich werd auch Schluss machen!
Aber bei TEIL B fehlt mir irgendwie jegliche Verständnis!
Aber vielleicht wirds ja noch! :)
GN8
 

SebiB90

Top Contributor
für teil b schau dir die Klasse java.io.File an.
mit isDirectory() und isFile() kannst du unterscheiden ob es eine datei ist oder nicht.
mit listFiles() bekommst du ein File array mit allen dateien in dem ordner, wenn es ein ordner ist.
mit lastModified() bekommst du die letzte änbderung raus und mit length() die datei größe
und dann würd ich die ordner rekrusiv auslesen, beispiel hab ich ja schon gegeben(paar seiten vorher)

so ich hoffe das hilft dir zunächst weiter.
 

Sindbad1983

Top Contributor
Hi Sebi!

Ich werd erst am WE wieder dazukommen!
Hab aber schon mit Teil B begonnen!
Da fehlt echt nimmer viel!
Aber leider wartet die neue HÜ schon wieder!
Mal schaun, wie es sich ausgeht!
Also bis bald!
Danke für deine Hilfe!Kennst du dich aus mit JUNIT?
ciao,Tommy
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben