Наличие проблем с "попробуй с ресурсами"
УТОЧНИТЬ: Я не могу даже скомпилировать из-за сообщений от Eclipse. Первый фрагмент кода: input
а также inputBuffer
не признаются Второй фрагмент кода, Eclipse хочет, чтобы я переключил переключатель "Соответствие и JRE на 1,7"
Я новичок в попытке попробовать с ресурсами, и я не совсем понимаю синтаксис или что я делаю неправильно. Вот мой код
try {
FileReader input = new FileReader(this.fileName);
BufferedReader inputBuffer = new BufferedReader (input);
String line;
while ((line = inputBuffer.readLine()) != null) {
String[] inputData = line.split(",");
Node<Integer> newNode = new Node<Integer>(Integer.parseInt(inputData[0]),
Integer.parseInt(inputData[1]));
this.hashMap.add(newNode);
}
//inputBuffer.close();
//input.close();
}catch (NumberFormatException nfe){
System.out.println(
"Repository could not load data due to NumberFormatException: " + nfe);
}catch (FileNotFoundException fnfe) {
System.out.println("File not found, error: " + fnfe);
}finally {
inputBuffer.close();
input.close();
}
Блок finally не работает, поэтому я хотел попробовать
try (FileReader input = new FileReader(this.fileName)) {
......
}catch (FileNotFoundException e) {
......
}finally {
inputBuffer.close();
input.close();
}
тем не мение
Я должен также добавить BufferedReader в
try (...)
... но как?Также для этого необходимо, чтобы я переключил "Соответствие и JRE на 1,7". Я не знаю, что это значит и как это повлияет на мою программу, я не хочу делать это, пока кто-нибудь не объяснит, что все это значит, или если я что-то не так делаю.
РЕДАКТИРОВАТЬ
Я переместил декларацию перед попыткой блока и инициализировал с нулем, это нормально?
FileReader input = null;
BufferedReader inputBuffer = null;
try {
input = new FileReader(this.fileName);
inputBuffer = new BufferedReader (input);
...
} ...
2 ответа
Сначала объявите input и inputBuffer перед попыткой {}catch(){}
как это
FileReader input = null;
BufferedReader inputBuffer = null;
try
{
------
-------
}
в вашем первом блоке в finally: проверьте ниже два условия
if(inputBuffer != null)
{
inputBuffer.close();
}
if(input != null)
{
input.close();
}
Второе: если вы хотите использовать более одного ресурса, сделайте это:
try ( OpenDoor door = new OpenDoor(); OpenWindow window = new OpenWindow() )
{
}
В этом случае нет необходимости закрывать вышеуказанные ресурсы в блоке finally.
Вы должны использовать Java 7, чтобы использовать оператор try-with-resources.
Также в блоке try-with-resources используется интерфейс AutoClosable, поэтому не включайте эти закрытия в блоке finally. Они будут вызваны автоматически.
Если вы хотите использовать BufferedReader, попробуйте это:
try (BufferedReader bufRead = new BufferedReader(new FileReader(this.fileName))) {
......
}catch (FileNotFoundException e) {
......
}
Вы также можете использовать несколько ресурсов, например, так:
try (FileReader input = new FileReader(this.fileName);
BufferedReader bufRead = new BufferedReader(input) ) {
......
}catch (FileNotFoundException e) {
......
}
Есть еще одна важная вещь: если вы закроете BufferedReader
который оборачивает другой Reader
эта основа Reader
тоже будет закрыт.