Ler bytes de arquivo texto de trás para frente

Pessoal, tem como ler byte a byte de um arquivo de trás para frente?

Ler byte a byte eu já estou fazendo sem problemas, mas é da esquerda para direita. E eu gostaria de ler da direita para a esquerda.

OBS: não dá para inverter o arquivo (a não ser que dê para inverter seu texto sem precisar adquirir o mesmo e salvá-lo novamente), pois ele tem um tamanho absurdamente grande, ia levar uns 30 minutos para fazer isso (sem contar que ia dar um erro de memória do Java na hora).

Eu preciso ler só o finalzinho (uns 300 caracteres), mas não sei o tamanho total (quantos caracteres) o arquivo possui.

Também ajuda se alguém souber com inverter o texto do arquivo com um comando primitivo do próprio SO (o ruim é que eu vou ter que achar um do MAC, um do LINUX e um do WINDOWS :frowning: )

Eta vida difícil essa de programador heheeheh
Obrigado

você quer ler as últimas linhas de um arquivo? Use mais ou menos o que o comando “tail” faz.

Basicamente, ele lê (usando o equivalente em C ao java.util.RandomAccessFile) os últimos N bytes de um arquivo, e então divide esses bytes em linhas.

Oi cara
Pega o channel do arquivo
muda a position nele e le o final…
assim:

// quero os ultimos 300
		int lastBytes = 300;
		FileChannel channel = new File("meuarquivo.dat");
		channel.position(channel.size()-lastBytes);
		ByteBuffer buffer = ByteBuffer.allocate(lastBytes);
		channel.read(buffer);
		
		System.err.println(new String(buffer.array()));

Aproveitando…
uma vez queria fazer um arquivo de 20Gb rapidamente…
fiz assim…:

FileChannel channel = new File("meuarquivoGIGANTE.dat");  
// 20 gb
channel.position(20*1024*1014*1024);  
ByteBuffer zero = ByteBuffer.allocate(1);  
channel.write(zero);
channel.force(false);
channel.close();

faz rapidinho…quase na hora…e lota o HD :smiley:

[code]FileChannel channel = new File(“meuarquivoGIGANTE.dat”);

Type mismatch: cannot convert from File to FileChannel[/code]

Tentei seu exmplo mas ele apareceu o erro ai de cima.
Faltou algo?

Valews!

Desculpe cara…escrevo direto aqui , sem o Control + Space do eclipse é complicado :stuck_out_tongue:

troca essa linha com erro por isso:

FileChannel channel = new FileInputStream("meuarquivo.dat").getChannel()