2010-07-21 38 views
5

我有一大組文件,所有這些文件都有(應該是)附加到文件末尾的哨兵字符(1字節)。我如何讀取最後一個字節(以確保它是字符)並將其截斷爲大小(即:刪除字符)?從文件中讀取最後一個字節並截斷爲大小

我知道我可以讀取所有東西,並將它寫回去減去最後一個字符,但是必須有一種方法才能達到特定字節,不是嗎?

+2

似乎對我很危險。如果一個普通的文件有特殊的字節呢? – tafa 2010-07-21 16:37:24

+0

@tafa我正在處理一組特定的文件,我知道將其移除是安全的。 – NullUserException 2010-07-21 16:41:40

回答

11

您可以使用RandomAccessFile類來查找文件末尾,讀取它,然後使用setLength()截斷文件。

更新:下面是一些代碼:

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 
} 

注意:如果該文件是在任何非8位我沒有測試此代碼,沒有錯誤處理等

字符集,target.length()-1將需要調整。

+0

+1 +檢查編寫代碼,雖然我不需要它。但RandomAccessFile正是我所期待的。 是的,顯然RandomAccessFile中的每一個方法都會拋出一個IOException異常。 – NullUserException 2010-07-21 16:36:58

+0

'file.readChar()'在這裏沒有意義,除非數據是使用'DataOutput'或兼容編碼(我認爲是UTF-16LE)編寫的。在任何情況下,它都不能用於指定的* sentinel字符(1字節)*。使用'readByte()'是適當的。 – maaartinus 2011-03-04 21:46:07