2013-10-10 1 views
5

Я задаю этот вопрос после много исследований, а также реализую его в своем коде после исследования, но в итоге у меня получилось FileNotFoundException. Что я здесь делаю, я хочу избежать hardcoding в моей java поэтому я создаю файл свойств с именем Constants.properties и вызываю его в своем java-коде. но он говорит, что он не находит файл. Мой файл свойств находится в папке src проекта. Ниже приведен фрагмент кода. Какие-либо предложения?FileNotFoundException при использовании файла свойств java

Свойства файла:

executable.run = C:\\server\\lrd.exe 
incoming.file = C:\\file\\test.ic 
executable.params1 = -z 
executable.params2 = -a[+] 
log.file = C:\\TESTFile\\test.txt 

код Java: Это класс файл, который имеет свойства файла детали.

public class PropInfo { 
    static private PropInfo _instance = null; 
    public String executable = null; 
    public String filein = null; 
    public String params1 = null; 
    public String params2 = null; 
    public String log = null; 

    protected PropInfo(){ 
     try{ 
      InputStream file = new FileInputStream(new File("Constants.properties")); 
      Properties props = new Properties(); 
      props.load(file); 
      executable = props.getProperty("executable.run"); 
      filein = props.getProperty("incomin.file"); 
      params1 = props.getProperty("executable.params1"); 
      params2 = props.getProperty("executable.params2"); 
      log = props.getProperty("log.file"); 
     } 
     catch(Exception e){ 
      System.out.println("error" + e); 
     }  
    } 

    static public PropInfo instance(){ 
     if(_instance == null){ 
      _instance = new PropInfo(); 
     } 
     return _instance; 
    } 
} 

Главный класс:

try{ 
    PropInfo propinfo = PropInfo.instance(); 
    String connString = propinfo.executable + " " + propinfo.params1 + " " + 
      propinfo.filein + " " + propinfo.params2 + " " + " " + propinfo.log ; 

    Runtime rt = Runtime.getRuntime(); 
    // Process pr = rt.exec 
    // (PropInfo.executable+" "+PropInfo.params1+" "+PropInfo.filein+" " 
    //+PropInfo.params2+" "+PropInfo.log); 
    Process pr = rt.exec(connString); 

    BufferedReader input = new BufferedReader(new InputStreamReader (pr.getInputStream())); 

    String line=null; 
    StringBuffer start= new StringBuffer(); 
    while((line=input.readLine()) != null) { 
     start.append("Started" + line + "\n"); 
     System.out.println(line); 
    } 

    // System.out.println("browse"); 

} 
catch (Throwable t) 
{ 
    t.printStackTrace(); 
} 
finally 
{ 
} 

дает это исключение:

errorjava.io.FileNotFoundException: Constants.properties (The system cannot find the 
file specified) 
java.io.IOException: Cannot run program "null": CreateProcess error=2, The system 
cannot find the file specified 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1042) 
at java.lang.Runtime.exec(Runtime.java:615) 
at java.lang.Runtime.exec(Runtime.java:448) 
at java.lang.Runtime.exec(Runtime.java:345) 
at com.emc.clp.license.StartTest.main(StartTest.java:44) 
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the 
file  specified 
at java.lang.ProcessImpl.create(Native Method) 
at java.lang.ProcessImpl.<init>(ProcessImpl.java:288) 
at java.lang.ProcessImpl.start(ProcessImpl.java:133) 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1023) 
... 4 more 
+0

В какой строке возникает исключение? –

+0

@JavaDevil: Исключение происходит в Process pr = rt.exec (connString); – user2821894

+0

Просьба отправить трассировку стека исключений. –

ответ

12

Да, не переводите свойства файла в папке Src. Поместите его туда, где вы начинаете jvm (или укажите абсолютный путь). Также я предлагаю избавиться от косой черты в именах путей.

UPDATE: Добавить это, чтобы выяснить, где поместить файл:

System.out.println(new File(".").getAbsolutePath()); 
+0

Я попытался поместить его в пакет, где существует основной класс, но все же такое же исключение. – user2821894

+0

Основной класс (файл java) или основной класс .class файл? – Axel

+0

Его в том же пакете, где находится мой java-файл. – user2821894

3

, как вы загрузите Constants.properties это должно быть прямо под пакет пакета Src на уровне, где начинается ваша упаковка.

, например,

если вы хава SRC/Java/propinfopackage/PropInfo

поместить его в папку Java и называют его следующим

InputStream propertiesInputStream = null; 
       Properties properties = new Properties(); 
       propertiesInputStream = PropInfo.class.getClassLoader().getResourceAsStream("/Constants.properties"); 
       properties.load(propertiesInputStream); 
    String value = properties.getProperty("executable.run"); 
....... 
1

У меня была такая же проблема, и это было решены следующим образом:

Properties prop = new Properties(); 
try { 
    prop.load(getClass().getResourceAsStream("/com/my/package/Constants.properties"));//here your src folder 
    System.out.println(prop.getProperty("executable.run")); 

} catch(IOException e) {} 
0

Убедитесь, что ваш файл свойств находится в корневом пути t он проект. Щелкните правой кнопкой мыши по проекту и вставьте файл свойств. Ваша ошибка пойдет.

Также см. Ответ @Axel выше. Это решит вашу проблему.