PrintWriter异常:字符串索引超出范围

问题描述 投票:0回答:1

我正在尝试读取文件,然后将一些文本附加到文件中的某个位置(即@ offset jabjab)。当我尝试写入偏移量为jabjab的文件时,会发生问题。有什么错误?

文件内容:

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

此外,此方法完成后,原始文件现在为空...

java exception printwriter
1个回答
3
投票

我认为您误解了PrintWriter.write(string,offset,length)的定义。如果我正确阅读了您的问题,您认为它将以该偏移量写入输出文件。但是,偏移量指定了要在字符串中开始的位置,因此,您尝试从偏移量23开始的字符串“ ok”中进行写入。由于该字符串只有2个字符,因此会出现异常。

如果您确实想覆盖文件中的特定字节,请查看java.io.RandomAccessFile。请注意,虽然可以用其他字节覆盖文件中的特定字节,但是如果不将数据读入内存并将新副本写入磁盘,则无法“插入”数据或从文件中删除数据(导致文件长度不同)。


0
投票

通过streamWriter写入文件时,我也面临相同的问题。我在事件查看器中遇到索引超出范围的异常,此后应用程序崩溃。您能够解决问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.