Java. read(char [] c, int offset, int len) не срабатывает смещение

113
02 октября 2019, 18:20
import java.util.Scanner;
import java.io.*;
public class Main {
    public static String Reader (String path, int offset, int length) {
        String string = "";
        try {
            FileReader reader = new FileReader(path);
            char[] buf = new char[length+offset];
            reader.read(buf,offset,length);
            for (int i=0; i<length+offset; i++) {
                string += buf[i];
            }
        }
        catch (IOException exception){
            System.out.println(exception.getMessage());
        }
        return string;
    }
    public static void main(String[] args) {
        System.out.println(Reader("D:/daile.txt",5,10));
    }
}

Написал метод, который по-идее должен считывать из текстового файла по расположению (path) определенное количество символов (length), со смещением на (offset) символов. Но смещение не работает. Считывает все символы на длину length. В чем проблема?

Answer 1

offset работает, но не так, как вы думаете. Этот параметр указывает с какого места сохранять прочитанное в результат, а не с какого места читать path (описание метода). В выводе результата в самом начале 5 пробелов. Это как раз ваш offset.

Здесь нужен метод skip(long n):

    reader.skip(offset);
    reader.read(buf,0,length);

Ну и поскольку считывается length символов, то и buf достаточно сделать длиной length:

char[] buf = new char[length];

И точно так же подкорректировать цикл:

for (int i=0; i<length; i++)

Итого:

try {
    FileReader reader = new FileReader(path);
    char[] buf = new char[length];
    reader.skip(offset);
    reader.read(buf,0,length);
    for (int i=0; i<length; i++) {
        string += buf[i];
    }
READ ALSO
HashSet и вывод элементов в консоль

HashSet и вывод элементов в консоль

[Petr, Alexandr, Ivan, Dmitriy] вот что я получил в консольПочему вышли значения таким образом, а не по порядку как в ArrayList например?

109
Android: Как лучше отследить объекты?

Android: Как лучше отследить объекты?

Необходимо отследить перемещение одной белой точки на черном фонеИспользую OpenCV и класс CameraPreview на основе SurfaceView

112
Не работает алгоритм A*

Не работает алгоритм A*

Метод получает на вход координаты начальной точки и конечной

137
Ошибка java.lang.RuntimeException:&hellip;невозможно запустить действие

Ошибка java.lang.RuntimeException:…невозможно запустить действие

Создаю приложение с ЯндексКартами

103