我有一大组文件,所有这些文件都有(应该是)附加到文件末尾的哨兵字符(1字节)。我如何读取最后一个字节(以确保它是字符)并将其截断为大小(即:删除字符)?从文件中读取最后一个字节并截断为大小
我知道我可以读取所有东西,并将它写回去减去最后一个字符,但是必须有一种方法才能达到特定字节,不是吗?
我有一大组文件,所有这些文件都有(应该是)附加到文件末尾的哨兵字符(1字节)。我如何读取最后一个字节(以确保它是字符)并将其截断为大小(即:删除字符)?从文件中读取最后一个字节并截断为大小
我知道我可以读取所有东西,并将它写回去减去最后一个字符,但是必须有一种方法才能达到特定字节,不是吗?
您可以使用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
将需要调整。
+1 +检查编写代码,虽然我不需要它。但RandomAccessFile正是我所期待的。 是的,显然RandomAccessFile中的每一个方法都会抛出一个IOException异常。 – NullUserException 2010-07-21 16:36:58
'file.readChar()'在这里没有意义,除非数据是使用'DataOutput'或兼容编码(我认为是UTF-16LE)编写的。在任何情况下,它都不能用于指定的* sentinel字符(1字节)*。使用'readByte()'是适当的。 – maaartinus 2011-03-04 21:46:07
似乎对我很危险。如果一个普通的文件有特殊的字节呢? – tafa 2010-07-21 16:37:24
@tafa我正在处理一组特定的文件,我知道将其移除是安全的。 – NullUserException 2010-07-21 16:41:40