Avatar billede hlu Nybegynder
02. oktober 2001 - 13:34 Der 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?
Avatar billede sunlock.dk Nybegynder
02. oktober 2001 - 21:32 #1
I hvilken forbindelse prøver du at tilgå filen? ...og hvordan?

::sunlock.dk::
Avatar billede agermose Nybegynder
03. oktober 2001 - 10:01 #2
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?

tror jeg, øhh - derfor ikke et svar :-)
Avatar billede carstenknudsen Nybegynder
03. oktober 2001 - 10:45 #3
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
Avatar billede mipe1 Nybegynder
03. oktober 2001 - 22:46 #4
er det så kun hvis man arbejder med webapps at man skal have sin property-fil i classpath ?
Avatar billede carstenknudsen Nybegynder
04. oktober 2001 - 10:14 #5
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester