2013-10-10 18 views
5

sto facendo questa domanda dopo aver fatto un sacco di ricerche e anche implementandolo nel mio codice dopo la ricerca ma ho finito con FileNotFoundException. Cosa sto facendo esattamente qui voglio evitare hardcoding nel mio java codice così sto creando un file di proprietà con nome come Constants.properties e lo sto chiamando nel mio codice java. ma dice che non sta trovando il file. Il mio file delle proprietà è nella cartella src del progetto. Di seguito è riportato lo snippet di codice. Eventuali suggerimenti? il fileFileNotFoundException quando si utilizza il file delle proprietà java

Proprietà:

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

del codice Java: Questo è il file di classe che ha le proprietà di file di dettagli.

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; 
    } 
} 

principale Classe:

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 
{ 
} 

Dà questa eccezione: il file

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

In quale riga si verifica l'eccezione? –

+0

@JavaDevil: si verifica un'eccezione in Process pr = rt.exec (connString); – user2821894

+0

Si prega di inviare la traccia dello stack di eccezione. –

risposta

12

Sì, non mettere le proprietà nella cartella src. Mettilo dove inizi la jvm (o fornisci un percorso assoluto). Inoltre, suggerisco davvero di eliminare le barre in avanti nei nomi dei percorsi.

UPDATE: Aggiungi questo per sapere dove mettere il file:

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

Ho provato a metterlo nel pacchetto in cui esiste la classe principale, ma sempre la stessa eccezione. – user2821894

+0

La classe principale (file java) o il file .class delle classi principali? – Axel

+0

Si trova nello stesso pacchetto in cui si trova il mio file java. – user2821894

3

Il modo in cui si carica Constants.properties dovrebbe essere proprio sotto il pacchetto pacchetto src al livello in cui inizia la confezione originale.

per esempio,

se Hava src/java/propinfopackage/PROPINFO

metterlo dentro la cartella java e chiamarla come segue

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

ho avuto lo stesso problema ed è stato risolto in questo modo:

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

Assicurarsi che il file delle proprietà sia nel percorso principale di t lui progetto. Fare clic con il tasto destro del mouse sul progetto e incollare il file delle proprietà. Il tuo errore andrà.

Consultare anche la risposta sopra @Axel. Risolverà il tuo problema.

Problemi correlati