web-dev-qa-db-fra.com

Comment lire un fichier à partir d'un certain décalage en Java?

Hé j'essaye d'ouvrir un fichier et de lire juste à partir d'un décalage pour une certaine longueur! J'ai lu ce sujet: Comment lire une ligne spécifique en utilisant le numéro de ligne spécifique d'un fichier en Java? là-dedans, il est dit qu'il n'est pas possible de lire une certaine ligne sans lire les lignes avant, mais je me pose des questions sur les octets!

FileReader location = new FileReader(file);
BufferedReader inputFile = new BufferedReader(location);
// Read from bytes 1000 to 2000
// Something like this
inputFile.read(1000,2000);

Est-il possible de lire certains octets à partir d'un décalage connu?

24
Khashayar

RandomAccessFile expose une fonction:

seek(long pos) 
          Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs.
21
Woot4Moo

FileInputStream.getChannel().position(123)

C'est une autre possibilité en plus de RandomAccessFile:

File f = File.createTempFile("aaa", null);
byte[] out = new byte[]{0, 1, 2};

FileOutputStream o = new FileOutputStream(f);
o.write(out);
o.close();

FileInputStream i = new FileInputStream(f);
i.getChannel().position(1);
assert i.read() == out[1];
i.close();
f.delete();

Cela devrait être correct puisque les documents pour FileInputStream#getChannel dites que:

Changer la position du canal, explicitement ou par lecture, changera la position du fichier de ce flux.

Je ne sais pas cependant comment cette méthode se compare à RandomAccessFile.