Чтение файлов, как правило, выполняется в пакетном режиме / ETL, и если этот код собирается в производство и будет использоваться несколько раз, а не только один раз, то я бы хотел подчеркнуть Производительность и простота обслуживания :
Только чтение минимальных символов для определения индекса пробела
- @ talex добавил очень хорошую строку кода, т.е.
break;
внутри цикла, так что вам не нужно будет читать доконец строки, но это будет работать, только если строка не имеет пробелов.Если строка может содержать пробелы, то вам понадобится lastIndexOf
пробел (" ")
или вовсе не break;
. Я предпочитаю использовать метод фреймворка lastIndexOf
, предполагая, что вы используете Java, потому что:
- он начнет читать справа, а не слева, и, предполагая, что числа всегда будут меньше длины строки, он в большинстве случаев будет быстрее находить индекс пробела, чем чтение с начала.
2-е преимущество заключается в том, что существует множество сценариев, которые уже обработаны фреймворком / утилитарным методом, поэтому зачем изобретать велосипед
int k = str.lastIndexOf(" ");
последнее, но не менее важное, если кто-то другой собирается сохранить этот код, ему будет легче, так как будет достаточно документации.
Чтение только необходимых строк из файлов
Похоже, вам нужно только определенное количество строк для чтения arrayInt.length
, если это так, то вы должны 'прервать;'цикл while
, если счетчик i
больше длины массива.
Операции ввода-вывода являются дорогостоящими, и, хотя вы получите правильный вывод, вы закончите сканирование всего файла, даже если в этом нет необходимости.
Не забудьте try-catch-finally
В коде предполагается, что проблем не будет, и он сможет закрыть файл после выполнения, но может быть n количество комбинаций, которые могут привести к ошибке, приводящей к сбою приложения и блокировкефайл.
См. пример ниже:
private Integer[] readNumbers(String fileName) throws Exception {
Integer[] arrayInt = new Integer[7];
String str = null;
BufferedReader buffy = new BufferedReader(new FileReader(fileName));
try {
int i=0;
while ((str = buffy.readLine()) != null) {
if(i> arrayInt.length){
break;
}
//get last index of " "
int k = str.lastIndexOf(" ");
if(k > -1){
String nums = str.substring(k+1);
arrayInt[i] = Integer.parseInt(nums);
}
//increment the line counter
i++;
}
} catch (Exception ex) {
//handle exception
} finally {
buffy.close();
}
return arrayInt;
}