2016-04-14 1 views
0

Я читаю файл и сохраняю его содержимое в строке. Код дает мне предупреждение как: Утечка ресурсов:. Как это решить?Предупреждение о сканере: утечка ресурса: <непризнанное значение closeble>

public static String JsonFileToString(String FileName) 
{ 
    String FileContent=null; 
    try { 

     FileContent = new Scanner(new File("src/main/resources/" + FileName)).useDelimiter("\\Z").next(); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 


    return FileContent; 

} 
+0

Java имеет именование: переменные и имена методов должны быть записаны в 'верблюжьих '(' fileContent', 'fileName' и т. д.) – heijenoort

ответ

0

Вы должны назначить сканер переменной, чтобы ее можно было закрыть в блоке finally.

String FileContent=null; 
     Scanner sc = null; 
     try { 

      sc = new Scanner(new File("src/main/resources/" + "")); 
      FileContent = sc.useDelimiter("\\Z").next(); 


     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } finally { 
      sc.close(); 
     } 
+1

, если конструктор' Scanner' терпит неудачу (то есть: файл не найден), вы вызовете close() на объект 'null'. – heijenoort

1

Вы не закрывая Scanner, что вы создаете для чтения файла, так что файл остается открытым после этого.

Предполагая, что вы используете Java 7+, используйте примерочный с-ресурсами для того, чтобы сканер очищен:

try (Scanner sc = new Scanner(new File("src/main/resources/" + FileName)).useDelimiter("\\Z")) { 
    return sc.next(); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
}