我试图读取一个文件,然后在文件中的某个位置附加一些文本(即@offset jab)。当我试图在偏移量jab处写入文件时,问题就出现了。怎么了?
文件内容:
Mi
<?xml Version="1.0"?>
_
File f = new File("data.dat");
String brstring = null;
String entrystring = null;
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String line;
StringBuilder result = new StringBuilder();
while ((line = br.readLine()) != null) {
result.append(line+"\r\n");
}
br.close();
System.out.print(result);
int jabjab = result.indexOf("?>");
System.out.println(jabjab);
PrintWriter fo = new PrintWriter(f);
fo.write("ok", jabjab, 2);
fo.flush();
fo.close();
} catch (Exception ex) {
System.out.print(ex.getMessage());
}
控制台输出包括错误:
Mi// output of the result string
<?xml Version="1.0"?>//output of the result string
23//output of jabjab
String index out of range: 25String index out of range: 25//output of exception
同样,在这个方法完成后,原始文件现在是空的。。。
1条答案
按热度按时间ej83mcc01#
我想你误解了printwriter.write(字符串、偏移量、长度)的定义。如果我读对了你的问题,你会认为它会以这个偏移量写入输出文件。但是,偏移量指定要写入的字符串的起始位置,因此您尝试从偏移量23处开始的字符串“ok”进行写入。因为字符串只有2个字符,所以会出现异常。
如果您真的想覆盖文件中的特定字节,请查看java.io.randomaccessfile。请注意,虽然可以用其他字节覆盖文件中的特定字节,但如果不将数据读入内存并将新副本写入磁盘,则无法“插入”数据或从文件中删除数据(导致文件长度不同)。