Ошибка записи txt-файла. Строковый индекс вне допустимого диапазона.

Может кто-нибудь объяснить мне, почему я получаю: 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) {}
        }

person user3637887    schedule 17.09.2014    source источник


Ответы (1)


BufferedWriter.write() принимает строку, смещение и длину. Смещение указывает первый символ для записи, длина указывает количество (сколько).

Индексы символов отсчитываются от 0. Первый символ имеет индекс 0, второй имеет индекс 1 и т. д.

Таким образом, очевидно, что в строке "FICH" есть 4 символа, допустимые индексы включают 0..3. offset = 1 и length = 4 приводят к тому, что последний символ равен 5, который выходит за границы (недопустимый индекс символа).

Точно так же "1234" имеет допустимые индексы 0..3 включительно, даже смещение выходит за пределы (5), а также последний символ (который будет равен 9).

Если вы просто хотите написать целое String, больше ничего не передавайте:

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

Если вам нужна только его часть, правильно укажите смещение и длину:

writer.write("Hello", 1, 3); // Writes "ell"
person icza    schedule 17.09.2014