# RandomAccessFile schreiben-lesen-schreiben-lesen



## SMoeller (26. November 2006)

Hi,
ich möchte mit Hilfe von der Klasse RandomAccessFile ein Programm schreiben, dass Strings ein- und auslesen kann. Das stellt noch kein Problem dar. Allerdings möchte ich nun erst ein paar Einträge in die Datei schreiben, sie dann in belibieger Reihenfolge ausgeben  (das funktioniert auch) und dann wieder Strings in die Datei schreiben und diese dann ausgeben. Nun funktioniert das erneute schreiben und lesen der Strings nich so, wie es funktionieren soll. 


```
import java.io.*;
public class myr
{
     private static RandomAccessFile raf;
     private int MAXL = 40;
     
     public myr(RandomAccessFile r)
     {
        raf = r;
     }
     
     public void schreiben(String s)
     {
        try
        {
            //long pos = raf.length();
            long pos = raf.getFilePointer();
        
            raf.writeUTF(s);
            raf.seek(pos + MAXL);
            raf.close();
        }
        catch(IOException ioe)
        {
            ioe.getMessage();
        }
    }
    
    public String lesen(int i)
    {   
        String s = null;
        try
        {
            raf.seek(i * MAXL);
            s = raf.readUTF();
            raf.close();
        }
        catch(IOException ioe)
        {
            ioe.getMessage();   
        }
        
        return s;
        
    }
    
    public static void main(String[] args)
    {
        myr test = null;
        File f = new File("Test.doc");
        
        try
        {
            f.createNewFile();
            test = new myr(new RandomAccessFile(f, "rw"));   
        }
        catch(FileNotFoundException fnfe)
        {
            fnfe.getMessage();   
        }
        catch(IOException ioe)
        {
            ioe.getMessage();   
        }
        
        test.schreiben("Guten Tag" + '\n');
        test.schreiben("Der Herr" + '\n');
        test.schreiben("Grüß Gott" + '\n');
        
        System.out.println(test.lesen(2));
        System.out.println(test.lesen(0));
        System.out.println(test.lesen(1));
        
        //test.schreiben("Hallo" + '\n');
        //System.out.println(test.lesen(3));
        
        //test.close();
        //f.delete();
    }
    
}
```


----------



## zerix (3. Dezember 2006)

Hi,
hätte letzte Woche schon geantwortet, hatte aber leider keine Zeit mehr 

So funktioniert es: 

```
import java.io.*;
public class myr
{
     private static RandomAccessFile raf;
     private int MAXL = 40;
     private int count = 1;
     public myr(RandomAccessFile r)
     {
        raf = r;
     }
     
     public void schreiben(String s)
     {
        try
        {
            long pos = raf.length();
            //long pos = raf.getFilePointer();
        
            raf.writeUTF(s);
            raf.seek(count*MAXL+pos);
            count++;
            
        }
        catch(IOException ioe)
        {
            ioe.getMessage();
        }
    }
    
    public String lesen(int i)
    {   
        String s = null;
        try
        {
            raf.seek(i * MAXL);
            s = raf.readUTF();
            
        }
        catch(IOException ioe)
        {
            ioe.getMessage();   
        }
        
        return s;
        
    }
    
    public void close(){
    	try {
			raf.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
    public static void main(String[] args)
    {
        myr test = null;
        File f = new File("Test.doc");
        
        try
        {
            f.createNewFile();
            test = new myr(new RandomAccessFile(f, "rw"));   
        }
        catch(FileNotFoundException fnfe)
        {
            fnfe.getMessage();   
        }
        catch(IOException ioe)
        {
            ioe.getMessage();   
        }
        
        test.schreiben("Guten Tag" + '\n');
        test.schreiben("Der Herr" + '\n');
        test.schreiben("Grüß Gott" + '\n');
        
        System.out.println(test.lesen(2));
        System.out.println(test.lesen(0));
        System.out.println(test.lesen(1));
        test.close();
        //test.schreiben("Hallo" + '\n');
        //System.out.println(test.lesen(3));
        
        //test.close();
        //f.delete();
    }
    
}
```

Musst die Datei aber erst löschen. Aber im moment wird die Datei jedesmal überschrieben wenn das Programm neu gestartet wird.


----------

