2010-07-21 45 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

相关问题