RandomAccessFile und readUTF/writeUTF

Status
Nicht offen für weitere Antworten.

Kaan

Bekanntes Mitglied
Hallo,

ich hab' folgendes Problem: Ich versuche aus einer Datei "Datei.txt" mit der Klasse RandomAccessFile und der Methode readUTF Strings aus der Datei rauszulesen.

Code:
import java.io.*;

public class Test 
{
	public static void main(String[] args)
	{
		try{
			RandomAccessFile raf = new RandomAccessFile("Datei.txt", "r");

			System.out.println(raf.readUTF());
			
			raf.close();
		}catch(IOException e){
			System.out.println(e.getMessage());
		}
	}
}

Datei.txt
Code:
Zeile1
Zeile2
Zeile3

Das Problem ist, dass ich von raf.readUTF() immer null anstatt einen String zurückbekomme. Ich hab' auch schon versucht die Datei "Datei.txt" im Editor als ANSI, Unicode, Unicode Big Endian und UTF-8 abzuspeichern, aber ohne Erfolg.

Der einzige Lösungsweg der bei mir zur Zeit funktioniert, ist die Datei "Datei.txt" mit einem Java-Programm mit RandomAccessFile und der Methode writeUTF() anzulegen.

Aber das ist aus der Sicht des Lehrers sicher nicht der verlangte Lösungsweg...Vielleicht habt ihr eine Ahnung und könnt mir helfen.

Danke.

mfg Kaan
 
B

Beni

Gast
Die API meint zu readUTF:
The first two bytes are read, starting from the current file pointer, as if by readUnsignedShort. This value gives the number of following bytes that are in the encoded string, not the length of the resulting string. The following bytes are then interpreted as bytes encoding characters in the modified UTF-8 format and are converted into characters.

Mit anderen Worten: Damit wird nicht einfach Text gelesen, sondern ein ganz speziell formatierter Teil aus einer Datei. Eine Textdatei hat dieses Format allerdings nicht. Damit kann nur aus Dateien in welche Zusatzinformationen geschrieben sind (writeUTF würde z.B. solche Infos schreiben) gelesen werden.
 
G

Guest

Gast
Man kann es so probieren:

Code:
randFile = new RandomAccessFile(file, "rw");
		byte[] buffer = new byte[(int)randFile.length()];//Dieser cast ist mit vorsicht zu genießen
		
		if(file.isFile())
		{
			while(randFile.getFilePointer() < randFile.length())	
				randFile.read(buffer);
					
			randFile.close();
		}
result = new String(buffer, "UTF-8");
 
T

tuxedo

Gast
Warum benutzt du keinen FileReader?

Code:
try {
			FileReader fr = new FileReader("c:/test.txt");
			BufferedReader br = new BufferedReader(fr);
			String line;
			while ((line=br.readLine())!=null){
				// arbeiten mit "line"
			}
			br.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

- Alex
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben