Java - RandomAccessFile seek(long pos) method



Description

The Java RandomAccessFile seek(long pos) method sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs. The offset may be set beyond the end of the file. Setting the offset beyond the end of the file does not change the file length. The file length will change only by writing after the offset has been set beyond the end of the file.

Declaration

Following is the declaration for java.io.RandomAccessFile.seek(long pos) method.

public void seek(long pos)

Parameters

pos − The offset position, measured in bytes from the beginning of the file, at which to set the file pointer.

Return Value

This method does not return a value.

Exception

  • IOException − If pos is less than 0 or if an I/O error occurs.

Example - Usage of RandomAccessFile seek(long pos) method

The following example shows the usage of RandomAccessFile seek(long pos) method.

RandomAccessFileDemo.java

package com.tutorialspoint;

import java.io.RandomAccessFile;
import java.io.IOException;

public class RandomAccessFileDemo {
   public static void main(String[] args) {
   
      try {
         // create a new RandomAccessFile with filename test
         RandomAccessFile raf = new RandomAccessFile("test.txt", "rw");

         // write something in the file
         raf.writeUTF("Hello World");

         // set the file pointer at 0 position
         raf.seek(0);

         // print the string
         System.out.println(raf.readUTF());

         // set the file pointer at 5 position
         raf.seek(5);

         // write something in the file
         raf.writeUTF("This is an example");

         // set the file pointer at 0 position
         raf.seek(0);

         // print the string
         System.out.println(raf.readUTF());
         
      } catch (IOException ex) {
         ex.printStackTrace();
      }
   }
}

Output

Assuming we have a text file test.txt in current directory which has the following content. This file will be used as an input for our example program −

ABCDE

Let us compile and run the above program, this will produce the following result −

Hello World
Hel This i

Example - Jump to a Specific Byte Position in a File

The following example shows the usage of RandomAccessFile seek(long pos) method.

RandomAccessFileDemo.java

package com.tutorialspoint;

import java.io.RandomAccessFile;
import java.io.IOException;

public class RandomAccessFileDemo {
   public static void main(String[] args) {
      try {
         RandomAccessFile raf = new RandomAccessFile("seek1.dat", "rw");

         // Write some bytes
         raf.writeBytes("ABCDEFGH");

         // Move to byte position 3 (4th byte)
         raf.seek(3);

         // Read the byte at position 3
         int b = raf.read();
         System.out.println("Byte at position 3: " + (char) b); // Output: D

         raf.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

Let us compile and run the above program, this will produce the following result−

Byte at position 3: D

Explanation

  • seek(3) moves the file pointer to the 4th byte (index starts at 0).

  • read() then reads the byte at that exact position.

  • Useful when you need to read from or write to a specific location in a file, like updating a record in place.

Example - Overwrite Data at a Specific Position

The following example shows the usage of RandomAccessFile seek(long pos) method.

RandomAccessFileDemo.java

package com.tutorialspoint;

import java.io.RandomAccessFile;
import java.io.IOException;

public class RandomAccessFileDemo {
   public static void main(String[] args) {
      try {
         RandomAccessFile raf = new RandomAccessFile("seek2.dat", "rw");

         // Write initial content
         raf.writeBytes("1234567890");

         // Overwrite at position 5
         raf.seek(5);
         raf.writeBytes("XYZ");

         // Reset pointer and read whole file
         raf.seek(0);
         byte[] data = new byte[10];
         raf.readFully(data);
         System.out.println("Updated file: " + new String(data)); // Output: 12345XYZ90

         raf.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

Let us compile and run the above program, this will produce the following result−

Updated file: 12345XYZ90

Explanation

  • seek(5) moves the file pointer to the 6th byte.

  • writeBytes("XYZ") overwrites the next 3 bytes.

  • Demonstrates how seek() enables in-place editing of file content.

java_io_randomaccessfile.htm
Advertisements