• ,

task32.task3210 или очередная бяка валидатора.

Уже невозможно просто бороться с валидатором, но может я всё-таки где-то не прав?
Условие:
Используем RandomAccessFile

В метод main приходят три параметра:
1) fileName — путь к файлу;
2) number — число, позиция в файле;
3) text — текст.

Считать текст с файла начиная с позиции number, длинной такой же как и длинна переданного текста в третьем параметре.

Если считанный текст такой же как и text, то записать в конец файла строку ‘true‘, иначе записать ‘false‘.
Используй RandomAccessFile и его методы seek(long pos), read(byte b[], int off, int len), write(byte b[]).
Используй convertByteToString(byte readBytes[]) для конвертации считанной строчки в текст
.

Вот мой код:
public class Solution {
public static void main(String... args) throws IOException {
    RandomAccessFile file=new RandomAccessFile(args[0],"rw");
    int n=Integer.parseInt(args[1]);
    file.seek(n);
    String text=args[2];
    byte[] fileText=new byte[(int)file.length()];
    file.read(fileText,0,text.length());
    file.seek(file.length());
    String shoudBeWritten="";
    if(convertByteToString(fileText).equals(text))shoudBeWritten="true";
    else if(!convertByteToString(fileText).equals(text))shoudBeWritten="false";
    file.writeChars(shoudBeWritten);
    file.close();
}
private static String convertByteToString(byte readBytes[]){
    return String.valueOf(readBytes);
}
}

Вопрос по RandomAccessFile

Всем привет.
Вопрос связан с задачей level18.lesson10.bonus03.
Вопрос в следующем. Есть файл(filefileName) с несколькими строками определенной длины(каждая строка начинается с новой строчки), к примеру:
аааа ааааа ааааа
bbbb bbbbb bbbbb
cccc ccccc ccccc
dddd ddddd ddddd
Мне нужно заменить строку «bbbb bbbbb bbbbb» на новую строку(newStroka = «1111 11111 11111», длина у нее такая же как и у тех что в файле). Использую следующий код:
RandomAccessFile file  = new RandomAccessFile(fileName, "rw");
            // задаю длину, для args
            StringBuilder idStr = new StringBuilder();
            idStr.append(args[1]);
            idStr.setLength(8);
            String lineIdStr = idStr.toString().replace('\u0000', '\u0020');           
            String line = null;
            //цикл по файлу. В line считывается 1 строка за проход
            while ((line = file.readLine()) != null) {
                System.out.println(line.length());
                /* определяю какую строку нужно поменять. StartWith не лучший способ, 
но код у меня сохранился именно с ним */ 
                if (line.startsWith(lineIdStr)) {
                    /* Поидее эти строчки должны работать так: В pos, сохраняем позицию курсора 
перед считаной строкой line. И мы перезаписываем требуюемую строку. 
Но после этого следующая строка бьется и записывается не правильно"*/
                    long pos = file.getFilePointer() -  line.length() - 2;
                    file.seek(pos);
                    file.write(newStroka.getBytes());
                }
            }
            file.close();

В итоге после выполнения этого кода в файле будет следующее:
аааа ааааа ааааа
1111 11111 11111ссс ссссс
dddd ddddd ddddd
Вопрос почему так?

Что Вас ждет на 32 уровне?

Без каких-либо вступлений озвучу основные темы 32 уровня: RandomAccessFile, StringReader, StringWriter, ByteArrayStream, PrintStream, DynamicProxy, RMI…

Много новых слов? А Вы как хотели, там их еще больше… хотя некоторые вещи из этого уровня Вы уже немного знаете, правда, теперь Вы столкнетесь с ними на более взрослом уровне! =) javarush.ru/