If there is ever a need to write bytes to a specific location to an existing file, here is an example of how to use the RandomAccessFile and FileChannel Java classes to do so:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
* Will write bytes to the beginning of an existing file.
*
* @author Ryan Chapin
*/
public class RandomAccessFileTest {
public static void main(String[] args) {
// Generate input string and the ByteBuffer for it
String stringToInsert = “This is a string to insert into a file.”;
byte[] answerByteArray = stringToInsert.getBytes();
ByteBuffer byteBuffer = ByteBuffer.wrap(answerByteArray);
File fileToModify = new File(“/path/to/file”);
RandomAccessFile randomAccessFile = null;
try {
randomAccessFile = new RandomAccessFile(fileToModify, “rw”);
} catch (FileNotFoundException e1) {
// TODO error handling and logging
}
FileChannel outputFileChannel = randomAccessFile.getChannel();
// Move to the beginning of the file and write out the contents
// of the byteBuffer.
try {
outputFileChannel.position(0);
while(byteBuffer.hasRemaining()) {
outputFileChannel.write(byteBuffer);
}
} catch (IOException e) {
// TODO error handling and logging
}
try {
outputFileChannel.close();
} catch (IOException e) {
// TODO error handling and logging
}
try {
randomAccessFile.close();
} catch (IOException e) {
// TODO error handling and logging
}
}
}