Вы можете использовать
String[] arrOfStr;
try(Stream<String> lines = Files.lines(Paths.get(fileName))) {
arrOfStr = lines
.skip(1).limit(10)
.map(s -> s.substring(s.indexOf(": ")+2))
.toArray(String[]::new);
}
Это полезно только для фиксированной структуры, показанной в вашем примере файла. Поскольку вы хотите получить массив с определенным значением для каждого индекса, он должен быть фиксированным.
В противном случае рассмотрите возможность использования Map
:
Map<String,String> config;
try(Stream<String> lines = Files.lines(Paths.get(fileName))) {
config = lines
.map(s -> s.split(": ", 2))
.filter(a -> a.length == 2)
.collect(Collectors.toMap(a -> a[0], a -> a[1]));
}
System.out.println("Log is "+config.getOrDefault("Log", "Undefined"));
System.out.println("All values:");
config.forEach((key, value) -> System.out.println(" "+key+" = "+value));
Log is Log to Both
All values:
Processor cycle time {msec} = 10
Keyboard cycle time {msec} = 50
Projector cycle time {msec} = 25
Hard drive cycle time {msec} = 15
Log = Log to Both
Scanner cycle time {msec} = 10
Monitor display time {msec} = 20
Version/Phase = 2.0
File Path = Test_2e.mdf
Log File Path = logfile_1.lgf
Кстати, в следующий раз, когда вы будете иметь дело с BufferedReader
(или любым ресурсом) вручную, вы также должны использовать оператор try-with-resource , который обрабатывает закрытие автоматически (и лучше, чем ручное закрытие в блоке finally
):
String header;
Map<String,String> config;
try(BufferedReader br = new BufferedReader(new FileReader(fileName))) {
header = br.readLine();
config = br.lines()
.map(s -> s.split(": ", 2))
.filter(a -> a.length == 2)
.collect(Collectors.toMap(a -> a[0], a -> a[1]));
}
System.out.println("Header is "+header);
System.out.println("Log is "+config.getOrDefault("Log", "Undefined"));
System.out.println("All values:");
config.forEach((key, value) -> System.out.println(" "+key+" = "+value));