写入文本文件时出错字符串索引超出范围

时间:2014-09-17 12:33:58

标签: java file bufferedwriter writer

有人可以解释我为什么会这样:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5

File file = new File("file.txt");
    BufferedWriter writer = null;
    Date date;
    SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
    try { writer = new BufferedWriter(new FileWriter(file));        
            writer.write(" ",0,1);
            writer.write("FICH", 1, 4);
            writer.write("1234", 5, 4);
            writer.close();
        System.err.println(writer.toString());
    } 
    catch (IOException ex) {
        Logger.getLogger(FicheroTdALogic.class.getName()).log(Level.SEVERE, null, ex);
    }

    finally {
           try {writer.close();} catch (Exception ex) {}
        }

1 个答案:

答案 0 :(得分:0)

BufferedWriter.write()采用字符串,偏移量和长度。偏移告诉第一个字符写,长度告诉计数(多少)。

字符索引从0开始。第一个字符的索引为0,第二个字符的索引为1等。

很明显,在"FICH"字符串中有4个字符,有效索引为0..3。 offset = 1和length = 4导致最后一个char为5,超出界限(非法字符索引)。

类似地,"1234"具有有效的索引0..3,即使偏移量超出界限(5),也是最后一个字符(将在9处)。

如果您只是想写一个完整的String,请不要传递任何其他内容:

writer.write("Whole string will be written.");

如果只需要它的一部分,请正确指定偏移量和长度:

writer.write("Hello", 1, 3); // Writes "ell"