Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Suche delims für StringTokenizer

Suche delims für StringTokenizer

MetallSnake
MetallSnake08.03.0519:35
Ich weiß, blöder Titel aber mir fällt nichts besseres ein, und da wären wir auch schon beim Problem. Ich schreibe in Java den Festplatteninhalt in eine Text Datei und will später natürlich auch darin suchen, das Problem ist nur dass man unter OS X alle Zeichen in Dateinamen benutzen kann außer dem Doppelpunkt welcher aber von Java anstelle des Slashs im Dateinamen benutzt, und das Slash für die Pfadangabe, nun fehlt mir also ein delim für den Tokenizer. \t habe ich schon für den ersten Tokenizer benutzt brauche aber einen zweiten und es funktioniert kein \r (Zeilenvorschub) und auch kein \n (Neue Zeile) :`(
Irgendjemand eine Idee was man da machen kann, und überhaupt irgendjemand kapiert was ich will?
„Das Schöne an der KI ist, dass wir endlich einen Weg gefunden haben, wie die Wirtschaft weiter wachsen kann, nachdem sie jeden Einzelnen von uns getötet hat.“
0

Kommentare

Gilderoy Lockhart08.03.0520:15
Was schreibst Du in die Datei? Den Festplatteninhalt? Oder meinst Du die Dateienamen eines oder mehrerer Verzeichnisse?
Und Java verwendet den ":" statt des "/" im Dateinamen? Also etwa statt "/usr/opt/foo" ":usr:opt:foo"? Sowas. Ich dachte immer, der ":" wäre zum Trennen von Dateinamen unter Unixen und der Slash zum Trennen der Pfade... Wenn jetzt meine Vermutungen Deines Problems zutreffen, dann verwende doch "::" zum trennen der Dateinamen.
0
MetallSnake
MetallSnake08.03.0520:28
Also wenn du eine Datei hast die du test/123 nennst, wird die in Java als test:123 angezeigt. Die Pfade werden mit dem / angezeigt, also z. B. /Applications/test:123

In die Datei schreibe ich die Dateinamen und den dazugehörigen Pfad einer Festplatte oder sonstigem Datenträger.

"::" kann ich nicht verwenden weil eine Datei ja theoretisch auch test//123 heißen könnte und damit in der Datei als test::123 angezeigt wird.
„Das Schöne an der KI ist, dass wir endlich einen Weg gefunden haben, wie die Wirtschaft weiter wachsen kann, nachdem sie jeden Einzelnen von uns getötet hat.“
0
Gilderoy Lockhart08.03.0520:43
Ah.. ok. Dinge gibts...
Dann verwende doch "//" als Delimiter. Ein leerer Dateiname darf ja nicht sein, oder?

Damit wäre
/usr/opt/foo//home/xy//home/xy/test:123//bin/ls
eindeutig zu zerlegen.

0
Gilderoy Lockhart08.03.0520:44
Aehm.. also
usr/opt/foo//home/xy//home/xy/test:123//bin/ls
wäre eindeutig zu zerlegen.
0
MetallSnake
MetallSnake08.03.0521:02
Gute Idee, aber mir fällt grad auf so ein delim kann nur aus einem Zeichen bestehen.
„Das Schöne an der KI ist, dass wir endlich einen Weg gefunden haben, wie die Wirtschaft weiter wachsen kann, nachdem sie jeden Einzelnen von uns getötet hat.“
0
Gilderoy Lockhart08.03.0521:21
Aehm.. sach mal.. wie und mit was erstellst Du denn die Dateien mit den Namen? Und wer bestimmt hier das Format? Und wo und wie und mit was liest du die Datei dann wieder?

Wieso speicherst Du die Dateinamen nicht maskiert ab? Und liest sie ebenso wieder ein? Und mich wundert ja immer noch, dass Java aus "/" im Dateinamen einen ":" macht... wird da kein Unicode-Zeichen reingesetzt?
0
MetallSnake
MetallSnake09.03.0501:08
mhm mit einem FileWriter schreibe ich die Datei, das Format ist eine normale TextDatei deren Inhalt ich bestimme. Einlesen genauso mit einem FileReader über den StringTokenizer.

Was meinst du mit maskiert? Binär? Das wollte ich anfangs aber wollte mich vor allem am Anfang nicht mit Dingen aufhalten die ich nicht sofort hinbekomme da ich nicht viel Zeit für das Projekt habe.

Und das aus dem / ein : gemacht wird liegt wohl an der Kompatibilität zu OS 9, in OS X wird ja das / zum trennen der Pfade benutzt, unter 9 aber der Doppelpunkt, da man jetzt aber Dateien mit einem / haben konnte wird das in OS X intern wohl mit einem Doppelpunkt gespeichert. Ziemlich verwirrend, Jedenfalls wenn du im Terminal das Inhaltsverzeichnis eines Ordners ausgibst werden die / im Dateinamen auch mit einem : angezeigt.
„Das Schöne an der KI ist, dass wir endlich einen Weg gefunden haben, wie die Wirtschaft weiter wachsen kann, nachdem sie jeden Einzelnen von uns getötet hat.“
0
Rantanplan
Rantanplan09.03.0501:22
MetallSnake[quoteZiemlich verwirrend, Jedenfalls wenn du im Terminal das Inhaltsverzeichnis eines Ordners ausgibst werden die / im Dateinamen auch mit einem : angezeigt.[/quote]

Hä? Seit wann denn das? Es ist zwar richtig, daß an manchen Stellen der Doppelpunkt zum Trennen benutzt wird, weil das im alten MacOS so war, aber "nach oben" liefert OS X nur noch POSIX-kompatible Pfadnamen und die haben als Trenner / und nicht :

Auch in Java. Ich habe jahrelang beruflich Java-Apps entwickelt, auch unter OS X, aber das wäre mir neu. Du kannst dir mit System.getProperty() übrigens ankucken, was der Delimiter ist, der Key ist path.separator.
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
0
Christian Fries09.03.0501:35
Wenn Du die Datei selbst wieder weiter verarbeitest, dann würde ich ggf. auf den Tokenizer verzichten - er eignet sich hier offensichtlich nicht - und deine Daten in einem anderen "Format" Abspreichern - z.B.
StingLänge String StringLänge String ....

Wobei StringLänge eben String.size() ist. Dann kannst Du von String zu String springen. In der Datei kannst Du auch suchen - wenn es Dich nicht stört, dass die Zahlen da drin stehen...

Aber vielleicht liege ich total daneben. Oder mit einem DataWriter?
0
Gilderoy Lockhart09.03.0512:29
Mit "maskiert" meine ich, dass Du wie in CSV oder (Java-)Strings die Dateinamen bei Bedaref (oder einfach immer) etwa in doppelten Hochkomma abspeicherst. Wenn im Dateinamen ein Hochkomma vorkommt kannst Du ihn maskieren (mit '\', dann musst Du auch den Backslash selbst maskieren, oder durch Verdoppelung:

Das ist "ein" String
c:\autoexec.bat
wo kommt die denn her?

Würde dann so aussehen:

"Das ist ""ein"" String", "c:\autoexec.bat", "wo kommt die denn her?"

Oder

"Das ist \"ein\" String""c:\\autoexec.bat""wo kommt die denn her?"

Dann kannst Du das aber nicht mehr mit dem StringTokenizer lesen.

Ich muss ja zugeben ich bin im Laufe der Zeit sehr Faul geworden und verwende auch in solchen Fällen einfach XML, aber das mag eine "deformation professionelle" sein Andere Dateiarten kommen bei mir nicht mehr auf die Platte.

Die DataWriter-Idee ist auch nicht schlecht. Meine Güte, das Problem hat doch am Ende nichts mit Dateinamen zu tun, sondern einfach, wie mehrere Strings in eine Datei geschrieben werden. Und da gibt es einfach zu viele Lösungen, weil das Problem einfach zu alt ist...



0
MetallSnake
MetallSnake09.03.0512:29
Rantanplan vielleicht hast du mich ja falsch verstanden. Erstelle doch mal eine Datei oder Ordner mit einem / im Namen. Dann gehst du im Terminal in den Ordner in dem diese neue Datei oder Ordner liegt und zeigst dir den Inhalt mit ls an, dann wird ein : anstelle des / im Datei oder Ordner Namen angezeigt.
„Das Schöne an der KI ist, dass wir endlich einen Weg gefunden haben, wie die Wirtschaft weiter wachsen kann, nachdem sie jeden Einzelnen von uns getötet hat.“
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.