2017-02-16 7 views
0

Vielen Dank für die Hilfe. Was ich tun müssen, ist die folgende:Nur ein Token aus einer Datei lesen

** Öffnen einer Datei **

** Lesen Sie den ersten Token [Zeichenfolge] in der Datei zum Lesen **

** Melden Sie den nächsten Read_Cursor_Position **

** das Token zurück **

** Schließen Sie die Datei **

** die Datei wieder öffnen **

** Lesen Sie die * zweite * Token aus der Datei **

und so weiter und so fort, bis alle erforderlichen Daten gelesen wurden. Ich bin neu in Java, aber in C++ Tellg oder Tellp wird verwendet, um die Cursorposition und getline zum Lesen nur ein Token aus einer Datei zu extrahieren. Ich hoffe, diese Erklärung erklärt meine Frage besser.

Nach dem Schreiben einer Methode, die Daten mit einem Trennzeichen in eine UTF-Datei ausgibt, versuche ich jetzt, die Daten aus der UTF-Datei zu extrahieren. Die Art, wie die Daten extrahiert werden müssen, ist zu der Zeit ein Token, die Tokens haben, wie ich bereits sagte, ein Trennzeichen und alles, was Java tun muss, ist das Lesen des Tokens der Datei, bis das Trennzeichen gefunden wird. Hier ist der Code für den Verfasser Methode:

public void writeData(String data) throws IOException { 
    try { 
     dout.writeUTF(data); 
     dout.writeBytes("^"); 
    } catch(IOException e) { 
     throw e; 
    } 
} 

und hier ist der Leser:

public void readData() throws IllegalStateException { 
    try { 
     apstr = new StringBuilder(); 
     while(scan.hasNext()) { 
      apstr.delete(0,apstr.length()); 
      apstr.append(scan.next()); 
      System.out.println("The token is: " + apstr); 
     } 
    } catch(IllegalStateException e) { 
     scan.close(); 
     throw e; 
    } 
    scan.close(); 
} 

Die Datei enthält die folgenden Daten: Java^C++^PHP^ und der Ausgang ist: Java^C++^PHP^ aber alles, was ich lesen möchte, ist das Wort Java

Wie kann ich machen Java das gleiche tun?

übrigens, wie gehe ich über das Posten einer neuen Frage? Auf dieser Webseite gibt es keine Schaltfläche, auf der "Eine neue Frage veröffentlichen" steht. Danke im Voraus.

+0

so liest der Scanner aus der Datei? Dann willst du writeUTF nicht benutzen. writeUTF codiert nicht so, wie Sie denken. Verwenden Sie einen Writer und geben Sie UTF-8-Codierung – MeBigFatGuy

+1

Btw, Sie _cannot_ möglicherweise Ihren genauen Code posten. Die Printline stimmt nicht mit Ihrer angeblichen Ausgabe überein. :) – Keith

Antwort

-1

Verwenden Sie die StringTokenizer.

Es enthält einen Konstruktor StringTokenizer(String str, String delim) - in dem Ihr Trennzeichen das Karat ("^") Zeichen ist, und eine nextToken() Funktion, um das nächste Token als String zurückzugeben.

Auch diese StackOverflow post zeigt verschiedene Optionen zum Lesen Ihrer Datei in eine String.

+0

'StringTokenizer' ist eine Legacy-Klasse, um die Zeichenkette zu symbolisieren, die Sie verwenden sollten' String # split(); ' – matoni

+0

Danke allen für die Hilfe. – Amno

0

Sie sollten mit einem Writer in Ihre Datei schreiben. Wenn Sie UTF-8-Kodierung verwenden möchten, tun Sie etwas wie

PrintWriter pw = neuer PrintWriter (neuer OutputStreamWriter (neuer FileOutputStream ("somepath"), StandardCharsets.UTF_8)));

dann tun

pw.println ("irgendein Text");

mit DataOutputStream für Sachen, die Sie mit einem Scanner lesen wird nicht funktionieren.