java - "리소스로 시도"에 문제가 있음

출처 java try-with-resources

명확히하기 위해 : Eclipse의 메시지 때문에 컴파일조차 할 수 없습니다. 첫 번째 코드 조각 : inputinputBuffer는 인식되지 않습니다. 두 번째 코드 스 니펫 인 Eclipse에서 "Compliance and JRE를 1.7"로 전환하길 원합니다.

나는 try-with-resources를 처음 사용하고 구문이나 내가 뭘 잘못하고 있는지 잘 이해할 수 없습니다. 내 코드는 다음과 같습니다.

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 (...)에 추가해야하지만 어떻게해야합니까?
또한 "Compliance and JRE를 1.7"로 전환해야합니다. 그게 무슨 뜻인지, 지금까지 내 프로그램에 어떤 영향을 미칠지 모르겠습니다. 누군가가 그것이 의미하는 바를 설명 할 때까지 또는 내가 뭔가 잘못하고있을 때까지 기꺼이하지 않습니다.


편집하다

try 블록 전에 선언을 이동하고 null로 초기화했습니다. 이것이 "OK"입니까?

FileReader input = null;
BufferedReader  inputBuffer = null;

try {
    input = new FileReader(this.fileName);
    inputBuffer = new BufferedReader (input);
    ...
}   ...
먼저 try {} catch () {} 전에 input과 inputBuffer를 선언합니다.

이렇게

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 - Java 인터페이스에 대한 Java 특성 파일 바인딩

java - 날짜 시간 형식 Java로 시간 추가

java - Java의 내부 클래스에서 변수에 액세스

java - ArrayIndexOutOfBoundsException 데이터 액세스 시도

java - charAt ()은 문자열을 반환하지 않습니까?

enums - Java API에서 열거 형 사용

java - 자바에서 정수 비교

java - RandomAccess 인터페이스, 왜 메소드가 없습니까?

java - 배포 (게시) 후 Weblogic 오류 : 오류 503-- 서비스를 사용할 수 없음

java - Java의 arraylist에 대용량 파일을로드하는 가장 좋은 방법