Пожалуйста, объясните как работает данный метод.
То, что он перемещает курсор на определенную позицию в байтах это я знаю, но все равно у меня лажа получается.
Есть файл состоящий из нескольких строк и в определенную мне нужно дописать символ(два, три и т.д.). Строки равные по своей длине. Номер строки куда писать является входящим значением, но всегда приходит по порядку и кол-во символов которое дописывается тоже одинаковое.
Я беру первую строку(так как это String
, то можно вызвать getBytes()
), если номер строки не 0, то умножаю длинную массива байт на номер строки(в моем понимании должен получить именно то количество байт которое необходимо). Передаю полученное значение в seek()
и пишу в файл то, что мне нужно. Но все равно раз за разом получаю белиберду.
Подправил. Сам метод пишет в файл определенную цифру. Если не использовать перевод строки, то пишется в одну линию так как ожидаемо(0 1 2 3 0 1 2 3 ..). А при переходе на новую строку я получаю
0
0 3
А ожидаю:
0 0 0 ... 0
1 1 1 ... 1
2 2 2 ... 2
3 3 3 ... 3
Код метода:
private static synchronized void controller(int number, RandomAccessFile raf) throws IOException {
String file = raf.readLine()+"";
String line = "";
if(number!=0)
raf.seek(file.replaceAll("null","").getBytes().length * number);
else
raf.seek(file.replaceAll("null","").getBytes().length);
line = raf.readLine() + "";
line = line.replaceAll("\n","").replaceAll("null", "") + number + " ";
line += "\n";
raf.write(line.getBytes());
}
код вызова метода:
RandomAccessFile file = new RandomAccessFile("someFile.txt","rw");
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
controller(0, file);
controller(1, file);
controller(2, file);
controller(3, file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
в идеале конечно же переписывать с нуля файл, но это уже другой вопрос и с этим буду раздираться позже
Метод RandomAccessFile.readLine()
читает символы только стандартной ASCII кодировке:
Each byte is converted into a character by taking the byte's value for the lower eight bits of the character and setting the high eight bits of the character to zero. This method does not, therefore, support the full Unicode character set.
То есть, если в файле будут встречаться не ASCII символы или итого хуже кодировка будет 2-х байтовая, то будет читать разный мусор.
Короче все зависит от кодировки исходного вашего файла. Если кодировка UTF-8, то можно попробовать прочитать методом: RandomAccessFile.readUTF()
P.S. lineString.getBytes()
- подсчитывает количество байтов используя текущую кодировку JVM, а не кодировку файла - так что это нерабочий код.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Вообщем у меня есть CoordinatorLayout и мну нужно его редактировать, но проблема в том, что его preview не отображается в android Studio? А запускать по 500 раз...
Не совсем понимаю как должна выглядеть структура проекта, соответствующая REST APIНа данный момент у меня есть простой сервлет
Пытаюсь вставить изображение в TextViewПо нажатию на кнопку выполняется следующий код: