02. oktober 2001 - 13:34Der er
4 kommentarer og 1 løsning
Problem med properties fil
Jeg har et problem med at mit program ikke vil åbne en \"cosname.properties\" fil. Filen ligger i min CLASSPATH. Jeg har også prøvet at lægge den i min jar fil - men stadig uden virkning. Har du et godt forslag til hvad jeg gør forkert?
bliver en propertie fil ikke loaded relativt til den kaldende klasses placering - altså ikke noget med at ligge den andre steder selv om stedet er omfattet af classpath henvisninger?
Det er korrekt at din classpath ikke har noget at gøre med åbning af filer. Det mest elegante er som du allerede har overvejet, nemlig at læse filen fra din jar fil. Herunder er et løsningsforslag. Det antages at din jar fil hedder Min.jar og at din fil indeholder en java.util.properties. Hvis ikke det sidsnævnte holder er det let at modificere koden til at læse en fil ind. Noter at load metoden kan kaste en IOException så alt efter hvor din kode ligger skal du overveje at fange den eller erklære den. Håber at koden kan tilpasses uden de store sværdslag. import java.io.*; import java.util.*; import java.util.jar.*; String jarFileName = \"Min.jar\"; String propFileName = \"cosname.properties\"; String classpath = System.getProperty( \"java.class.path\" ); String pathseparator = System.getProperty( \"path.separator\" ); String fileseparator = System.getProperty( \"file.separator\" ); StringTokenizer tokenizer = new StringTokenizer( classpath, pathseparator ); boolean found = false; while ( tokenizer.hasMoreTokens() && ! found ) { String token = tokenizer.nextToken(); String fileseparator = System.getProperty( \"file.separator\" ); int idx = token.lastIndexOf( fileseparator ); if ( idx < 0 ) continue; String name = token.substring( idx+1, token.length() ); if ( name.equals( jarFileName) ) { // is it the right jar file? found = true; try { JarFile jar = new JarFile( token ); Enumeration enum = jar.entries(); String filename; // iterate through all jar entries while ( enum.hasMoreElements() ) { JarEntry entry = (JarEntry)enum.nextElement(); // is this entry the desired properties file? if ( entry.getName().equals(propFileName)) { InputStream is = jar.getInputStream( entry ); Properties prop = new Properties(); prop.load( is ); // read the properites from the jar file } // if } // while } // while
mipe1: Hvem er spørgsmålet rettet til? At have en (default) property fil i en jar fil er næsten altid en god ide, men det bør være muligt for brugeren at have en lokal kopi der læses i stedet for default filen. Dette gælder for alt, hvad enten det er en web applikation eller ej.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.