# RandomAccessFile und readUTF/writeUTF



## Kaan (5. Jun 2005)

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.


```
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

```
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


----------



## Beni (5. Jun 2005)

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.


----------



## Kaan (5. Jun 2005)

Ok, du scheinst recht zu haben!

Danke für deine Erklärung.
mfg Kaan


----------



## Guest (10. Okt 2007)

Man kann es so probieren:


```
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");
```


----------



## tuxedo (10. Okt 2007)

Warum benutzt du keinen FileReader?


```
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


----------

