我想将每个10kb文件的内容数据写入文件。它看起来像这样:
我尝试了什么:
FileInputStream is;
FileOutputStream out;
File input = new File(filePath);
int fileLength = input.length();
int len = 0;
while (len < fileLength){
len += is.read(buff);
// write my data
out.write(data, 0, data.length);
// how to move is to read next 10kb???
}
我想知道无论如何将光标阅读器移动到下一个字节数量?或者我错过了什么?
更新:感谢@DThought
,这是我的实施:
File input = new File(filePath);
long fileLength = input.length();
byte[] data;
byte[] buff = new byte[data.length];
long JUMP_LENGTH = 10 * 1024;
RandomAccessFile raf = new RandomAccessFile(input, "rw");
long step = JUMP_LENGTH + data.length;
for (long i = 0; i < fileLength; i += step) {
// read to buffer
raf.seek(i);
raf.read(buff);
raf.seek(i); // make sure it move to correct place after reading
raf.write(data);
}
raf.close();
它运作良好。
答案 0 :(得分:2)
例如,您可以将空数组或空格写入该特定部分,因为您无法跳转到文件的特定内存而无法避免10KB
。
例如
OutputStream os = new FileOutputStream(new File("D:/a.txt"));
byte[] emptyByte=new byte[10*1024];
Arrays.fill(emptyByte, " ".getBytes()[0]);//Empty array
os.write(yourData,0,yourData.length-1);
os.write(emptyByte,0,emptyByte.length-1);
//Write after each data to leave space of 10KB
注意 我不知道它是如何为10KB
设置的,除此之外它只是一个例子,你可以使用它为你。我已经在文件的那一部分添加了空格。你可以根据你的要求实现它。我认为你不能直接跳转到特定的内存地址,但你可以用空数据填充它。
我想RandomAccessFile
的{{3}}方法也可以按照DThought
的建议为您提供帮助,但是从此文件的开头进行测量请注意。
答案 1 :(得分:2)
尝试使用http://developer.android.com/reference/java/io/RandomAccessFile.html RandomAccessFile而不是FileOutputStream。
这将使您能够寻求任意职位
byte[] data=new byte[1024];
RandomAccessFile file=new RandomAccessFile(new File("name"),"rw");
file.seek(10*1024);
file.write(data);