---
title: "RandomAccessFile"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/126002-randomaccessfile"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "Blårand"
published: "2005-04-09T12:29:53.000Z"
updated: "2005-04-18T08:58:17.000Z"
replies: 4
views: 246
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/126002-randomaccessfile"
---

# RandomAccessFile

## #1 — Blårand, 2005-04-09T12:29Z

Har skapat en klass där jag har följande method. Poängen är att man ska skriva in det medsända uppgifterna i en "RandomAccessFile". Har försökt och vridit och vänt på detta, men får det inte att fungera. 

Vad är det som är fel i nedanstående kod, alternativt vad krävs för justeringar för att jag ska kunna lagra de tre värdena på en post i "RandomAccessFile"-filen?

```
public void writePost(String strFilnamn, int intPost, int intOrgnr, String strNamn, String strOrt)throws IOException
{
	try {
		RandomAccessFile file = new RandomAccessFile(strFilnamn,"rw");
	
	file.seek(intPost);

	// Skriver in orgnr
	file.writeInt(intOrgnr);

	// Skriver in namn
	StringBuffer buffer = null;
	if ( strNamn != null )
		buffer = new StringBuffer( strNamn );
	else
		buffer = new StringBuffer( 15 );

	buffer.setLength( 15 );
      	file.writeChars( buffer.toString() );

      	// Skriver in filial
      	buffer = null;
	if ( strOrt != null )
		buffer = new StringBuffer( strOrt );
	else
		buffer = new StringBuffer( 15 );

	buffer.setLength( 15 );
      	file.writeChars( buffer.toString() );
      	file.close();

        } catch (IOException e) {
                JOptionPane.showMessageDialog(null,"FEL - Något gick knas tyvärr.");
	}
}
```

Permalänk: https://www.webforum.nu/p/126002

## #2 — Lime, 2005-04-11T08:23Z

Jag antar att du har tänkt såhär:

post 1: Organisationsnummer   Namn Ort
post 2: Organisationsnummer   Namn Ort
...
post n: Organisationsnummer   Namn Ort

Vet inte hur du anropar writePost men om jag antar att du skriver:
tr.writePost("c:\\\\temp\\\\test.txt", 7, 10002, "Lime7", "Stockholm");
för att få post 7 så blir det lite fel...

Då flyttar då markören till position 7 i filen och skriver därifrån. Vad du borde göra är att kolla hur lång en post är. I ditt fall blir den alltid orgnr + 15 +15. Du borde, om du inte väljer att ha en delare, t.ex. ; eller en post på varje rad, även sätta ett fast avstånd på organisationsnummret. Som det är nu så skriver den char-representationen av organisationsnummret.

Kod kommer strax...

Permalänk: https://www.webforum.nu/p/1590369

## #3 — Lime, 2005-04-11T08:37Z

```
    static final int POST_LENGTH_NAME = 15;
    static final int POST_LENGTH_TOWN = 15;
    static final int POST_LENGTH_ORGNO = 15;
    static final int POST_LENGTH_TOTAL = POST_LENGTH_NAME + POST_LENGTH_ORGNO + POST_LENGTH_TOWN+1;
    

    public void writePost(String strFilnamn, int intPost, int intOrgnr, String strNamn, String strOrt)
            throws IOException
    {
        try
        {
            RandomAccessFile file = new RandomAccessFile(strFilnamn, "rw");

            file.seek(intPost*POST_LENGTH_TOTAL);
            StringBuffer buffer = new StringBuffer();
            StringBuffer tmp_buffer = new StringBuffer(15);
            // Skriver in orgnr
            tmp_buffer.append(intOrgnr);
            tmp_buffer.setLength(POST_LENGTH_ORGNO);
            buffer.append(tmp_buffer);
            

            // Skriver in namn
            
            if (strNamn != null)
                tmp_buffer = new StringBuffer(strNamn);
            else
                tmp_buffer = new StringBuffer(POST_LENGTH_NAME);

            tmp_buffer.setLength(POST_LENGTH_NAME);
            buffer.append(tmp_buffer);

            // Skriver in filial
            if (strOrt != null)
                tmp_buffer = new StringBuffer(strOrt);
            else
                tmp_buffer = new StringBuffer(POST_LENGTH_TOWN);

            tmp_buffer.setLength(POST_LENGTH_TOWN);
            buffer.append(tmp_buffer);
            buffer.append(System.getProperty("line.separator"));
            buffer.setLength(POST_LENGTH_TOTAL);
                    
            
            file.writeChars(buffer.toString());
            file.close();

        }
        catch (IOException e)
        {
            System.out.println("FEL - Något gick knas tyvärr.");
            e.printStackTrace();
        }
```

Kanske lite bättre... men inte bra...

Permalänk: https://www.webforum.nu/p/1590376

## #4 — Blårand, 2005-04-14T18:59Z

Tack för informationen.

Det  var visst placeringen av vart datat skulle skrivas in som var grundorsaken till problemet, då jag missat att flytta markören till rätt post i filen med  file.seek(intPost\*POST_LENGTH_TOTAL);.

När jag ändå är på gång, vad fyller e.printStackTrace(); som du använder när du felhanterar i din exempelkod, för funktion?

Permalänk: https://www.webforum.nu/p/1592180

## #5 — Lime, 2005-04-18T08:58Z

e.printStackTrace() printar ut call-stacken. Då går det att se anropskjedjan och man får då exakt veta vilken rad som går åt helvete och vilka metoder som har anropat vem i vilken ordning.

Användbart när man kan få anrop till samma klass och samma metod från 100 olika andra klasser. Svårt att veta om det är "min" klass som gjort fel eller den som anropat metoden som skickat skräp.

Permalänk: https://www.webforum.nu/p/1596411

---

Tråden på webben: https://www.webforum.nu/amne/java/126002-randomaccessfile
