Datei mit Stringvariablen öffnen

A

arnoMA

Neues Mitglied
0
Ich habe eine Datei von einem mit VB.net geschriebenen Programm. Die Datei enthält Werte aus Stringvariablen. Diese Datei soll jetzt auf einem Androidgerät geöffnet werden. Das Problem ist, dass ich Bools, Ints etc öffnen kann, nur die Strings kommen nicht hoch, es fehlt mir ein readString(). Ich habe readUTF versucht - geht nicht, leer.
Der VB-Code:
Code:
Dim fs As FileStream = New FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)
Dim bw As BinaryWriter = New BinaryWriter(fs)
For i As Short = 1 To 1000
bw.Write(stringFoo(i))
...
In Java probiert:
Code:
FileInputStream inDat = new FileInputStream(path);
DataInputStream inData = new DataInputStream(inDat);
for(i=1;i<=1000;i++) {
stringFoo[i]=inData.readUTF(); <--????????
...
Vielen Dank im Voraus für Hilfe! (Bitte aber nichts zu 'Textdatei öffnen' - In meiner Datei sind unterschiedliche Datentypen gespeichert.)
 
Zuletzt bearbeitet von einem Moderator:
Ich habe mehrere Fragen:

1) Warum speicherst du nicht in ein interoperabeles Format wie XML oder CSV oder von mir aus JSON und sparst dir eine Menge Aufwand?

2) Du hast eine Binärdatei in deinem "very own arnoMA" Format geschaffen. Auf unterschiedlichen Plattformen (Windows PC und Java) musst du die "Bytes" in den Dateien selber interpretieren.

Wie sind denn deine Strings auf Windows terminiert? "null terminiert" (also "\0") oder hast du "\r\n" oder "\n"?

3) Wieso versuchst du UTF auf Java? Auf Windows sind Strings (unterstellt dabei ein Windows mit deutscher Sprache vom System) mit 1252 Encoding gespeichert.
 
zu 1 - Ich habe es alles auch in eine Textdatei konvertiert. Ja, ok, so geht es natürlich. Ich hätte die Dateien halt gerne ohne diesen Schritt nutzbar gemacht. (Es handelt sich um ein Vokabeltrainingsprogramm, auch für Menschen (meine Frau!! Blond:))), die es leicht haben sollen.
zu 2 - Ist doch nicht 'very own..', sondern normales VB, also ein String mit wohl 32 Bytes, dann Terminierung keine Ahnung, \n wäre ja Zeilenumbruch in Texten - es wird anhand der Bytelänge ausgelesen.
zu 3 - Das readUTF war das einzige, was etwas mit String zu tun hatte, daher habe ich es halt versucht. Ich vermute, dass die Bytelängen des VB-Strings nicht passen, nur in Java kenne ich keine Angabemöglichkeit dafür. Übrigens: Wenn ich eine Textdatei auslese, muss sie auch UTF kodiert sein, sonst (ANSI) gehen die ä etc. über den Jordan.
Vielen Dank aber für die Antwort. Hoffe ich habe mich verständlich ausgedrückt. Wenn es nicht so geht, wie ich eigentlich dachte, mache ich es über Textdatei.
 
Für dein Problem würde ich - auf beiden Welten - CSV mit UTF8 Encoding verwenden.

Du hast ja nur

A;B
C;D
E;F
...

Das ist zu popelig um sich groß nen Kopf zu machen.

Ich verstehe das Problem mit den "Datentypen" in dem Zusammenhang noch nicht. Woher hast du denn Bools oder Ints?

Der ursprüngliche Beitrag von 16:33 Uhr wurde um 16:46 Uhr ergänzt:

Hier zwei Libraries:

http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader <- csv für .Net

https://code.google.com/p/opencsv/ <- csv für Java
 
Es handelt sich, wie gesagt, um einen Vokabeltrainer, in VB geschrieben. (Ich will's jetzt auch abgespeckt fürs Handy.) Er speichert in zwei Dateien:
1. die Vokabeln - das sind die Strings, die ich direkt mit Java nicht aufbekomme. Das Programm exportiert in eine Textdatei und das geht dann, wenn ich noch nach UTF konvertiere. Kann ich für den Export auch noch einstellen.
2. Eine Datei mit Ints und Bools, die Einstellungen und alles Mögliche speichert und die direkt auch unter Android zu öffnen ist.
Das Problem ist wohl, dass String in Java kein primitiver Datentyp ist. C# würde es gehen.
 
Ok ;)
 
Das von rihntrha ist die Textdatei. Das geht ja. Ich bleibe wohl dabei.
Danke aber, jetzt weiß ich, was nicht geht.
 
Wie, gesagt... erstmal definieren und dann programmieren.

Das was du da unter vb erstellst ist irgendein internes vb Format. Da nimmst du was zufällig dabei rauskommt. Das geht nicht als Austauschformat.

cu
 
"Interne Formate" gibt es hier nicht. Das sind die Formate vom .Net-Framework für VB, C++,C# etc. Habe mal weitergeforscht - also die Strings werden mit \0 terminiert, die Länge ist variabel (nicht wie z.B. bei int = 4 Bytes). Es ging dann auch die ganze Datei mit den Strings als Text (eine Zeile!) in einen String einzulesen. Diesen hätte man dann splitten können mit Delimiter \0, wenn es ginge. Es splittet nichts. Habe die Datei in einem Hexeditor geöffnet. An den fraglichen Stellen finden sich dort unterschiedliche Symbole ohne erkennbares Schema.
Nu isses gut. Ich mach das über die konvertierte Textdatei.. funzt!
Danke nochmals für die Zuschriften!
 

Ähnliche Themen

B
Antworten
4
Aufrufe
495
bb321
B
M
  • MikelKatzengreis
Antworten
5
Aufrufe
132
swa00
swa00
S
Antworten
33
Aufrufe
2.674
Sempervivum
S
Zurück
Oben Unten