Если у вас небольшой файл, в котором допустимо загружать все содержимое в память:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
....
public static List<Integer> getInput(int lineIndex) {
List<Integer> list = new ArrayList<>();
try {
String line = Files.readAllLines(Paths.get("path to your file")).get(lineIndex);
list = Pattern.compile("\\s+")
.splitAsStream(line)
.map(Integer::parseInt)
.collect(Collectors.toList());
} catch (IOException ex) {
ex.printStackTrace();
}
return list;
}
Метод Files.readAllLines
возвращает список всех строк файла в виде строк, где каждая строка соответствует одной строке. с get(lineIndex)
вы получите желаемую n-ю строку, и вам нужно только проанализировать строки до целых чисел.
Второй подход:
Если у вас большой файл, используйте ленивую оценку потоков :
public static List<Integer> getInputLargeFile(int lineIndex) {
List<Integer> list = new ArrayList<>();
try (Stream<String> lines = Files.lines(Paths.get("path to your file"))) {
String line = lines.skip(lineIndex).findFirst().get();
list = Pattern.compile("\\s+")
.splitAsStream(line)
.map(Integer::parseInt)
.collect(Collectors.toList());
} catch (IOException ex) {
ex.printStackTrace();
}
return list;
}
При таком подходе вы используете метод lines.skip
для перехода на n строк с начала файла. А с findFirst().get()
вы получаете следующую строку после прыжка. Затем сделайте то же, что и выше, чтобы преобразовать числа.