2010-07-21 15 views
5

Dosyanın sonuna eklenen bir (1 bayt) karaktere sahip olan çok sayıda dosyam var. Son baytı (karakter olduğundan emin olmak için) nasıl okuyabilirim ve boyutu kısaltır (yani: karakteri kaldırmak)?Dosyadan son baytı oku ve büyüklüğü kes

Her şeyi okuyabildiğimi ve son karakteri eksi olarak yazabileceğimi biliyorum, ama belirli bir bayta ulaşmanın bir yolu olmalı, değil mi?

+2

Bana tehlikeli geliyor. Normal bir dosyada bu özel bayt varsa ne olur? – tafa

+0

@tafa Belirli bir dosyada çalışıyor. Bunu kaldırmak için güvenli olduğunu biliyorum. – NullUserException

cevap

11

Dosyanın sonuna gitmek için RandomAccessFile sınıfını kullanabilir, okuyabilir ve ardından dosyayı setLength() kullanarak kırpabilirsiniz. Güncelleme

:

File target = new File("/path/to/file"); 
RandomAccessFile file = new RandomAccessFile(target,"rwd"); 
file.seek(target.length()-1); // Set the pointer to the end of the file 
char c = file.readChar(); 
if(c == '|') // Change the pipe character to whatever your sentinel character is 
{ 
    file.setLength(target.length()-1); // Strip off the last _byte_, not the last character 
} 

Not: Burada bazı kod dosyası olmayan herhangi 8-bit ise ben bu kodu, hiçbir hata işleme vb

test etmedim karakter kümesi, target.length()-1 ayarlanması gerekecektir.

+0

+1 + kod yazmama rağmen ihtiyacım yoktu. Ama RandomAccessFile tam olarak aradığım şey. Ve Evet, RandomAccessFile'daki her yöntem bir IOException atar. – NullUserException

+0

'file.readChar()', veriler bir DataOutput veya uyumlu bir kodlama (UTF-16LE olduğunu düşünüyorum) kullanılarak yazılmışsa, burada bir anlam ifade etmemektedir. Hiçbir durumda, belirtilen * sentinel karakteri (1 bayt) * için çalışır. ReadByte() işlevinin kullanılması uygun olur. – maaartinus

İlgili konular