Почему не работает try с ресурсами
Не работает try с ресурсами, пытался первую строку добавить, но он пишет на всём предложении "';' expected".
Как ещё можно инициализировать line, чтобы после выполнения while он перестал жить?
public class Task implements AutoCloseable{
public static void main(String[] args) throws IOException{
BufferedReader br;
String path = args.length > 0 ? args[0] : null;
try (br = new BufferedReader(new InputStreamReader(new FileInputStream(path), "CP1251")))
{
String line;
while ((line = br.readLine()) != null) {
if (Check(line) == null) {
continue;
} else {
String[] strings = line.split("/");
Employee emp = new Employee(strings[0], new BigDecimal(strings[1]));
Department dep = new Department(strings[2]);
dep.addEmployee(emp);
System.out.println(strings[0] + " " + strings[1] + " " + strings[2] + " - корректна, обрабатываем");
}
}
System.out.println("---------------------------");
System.out.println("Выбрали корректные варианты");
System.out.println("---------------------------");
} catch (FileNotFoundException e) {
System.out.println("Файл не был найден, проверьте путь");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Исправьте путь к файлу, выходите за массив");
} catch (NullPointerException e) {
System.out.println("Вы забыли прописать путь к файлу");
}
}
public static String[] Check(String line) {
String regex = "[А-Яа-яЁёA-Za-z\\s]+";
if (!(line = line.trim()).isEmpty()) {
String[] strings = line.split("/");
if (strings.length < 3) {
System.out.println(line + " - неверный формат строки, ожидаем ФИО/10000.12/Департамент");
return null;
}
if (!(strings[0].matches(regex) && strings[2].matches(regex))) {
System.out.println(line + " - неверный формат ввода, нужно: Буквы/Цифры/Буквы");
return null;
}
if (!strings[1].matches("\\d{5}(\\.\\d{1,2})?")) {
System.out.println(line + " - некорректный ввод цифр, знаков. Зарплата не может быть отрицательной и иметь меньше 5 знаков");
return null;
}
return strings;
}
return null;
}
@Override
public void close() throws Exception {
System.out.println("Читаемый файл закрыт");
}
}
Ответы (2 шт):
Автор решения: azlov
→ Ссылка
BufferedReader необходимо объявлять и инициализировать внутри try
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path),"CP1251"))) {}
// обновления, с Java 9
BufferedReader br =new BufferedReader(new InputStreamReader(new FileInputStream(path),"CP1251"));
try (br) {}
Автор решения: Alexander Chernin
→ Ссылка
try ( BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path), "CP1251")))
{
while (true) {
String line = br.readLine();
if ( line == null )
break;
if (Check(line) == null) {
continue;
} else {
String[] strings = line.split("/");
Employee emp = new Employee(strings[0], new BigDecimal(strings[1]));
Department dep = new Department(strings[2]);
dep.addEmployee(emp);
System.out.println(strings[0] + " " + strings[1] + " " + strings[2] + " - корректна, обрабатываем");
}
}
} // try