Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11

    Java gestione file Proprerties

    Ciao a tutti,
    sono nuovo del forum, spero che la problematica che esporrò non è stata già trattata.
    Ho sviluppato un'applicazione in Java SE. All'avvio ha bisogno di scrivere un file, contenenti informazioni di collegamento al database, in una determinata cartella.
    Ho impostato la procedura di scrittura file tramite un file proreties, contenuto in un package dell'applicativo e nel quale sono presenti i percorsi e i nomi dei file.
    Fin quando effettuo le prove di avvio tramite NetBeans, l'applicazione non ha problemi, appena compilo e avvio il file JAR la procedura non riesce a leggere il file proreties contenuto all'interno di esso. Vorrei evitare di far leggere file esterni al pacchetto jar.
    Come posso fare?
    ho girato per internet ma non sono riuscito a trovare una soluzione.....
    di seguito il file Proprerties:
    codice:
       public class Proprerties {
    
      private static String fileProperties="src/ToolSql/strcon.properties";
    
          public Proprerties() {
          }
    
       public static synchronized String getString(String pKey) {
    
       //String userDir = System.getProperty("user.dir");
       //System.out.println(url);
               //VALORE DI RITORNO
               String myReturn=null;
               Properties props = new Properties();
    
               try {
               //CARICO IL FILE DI CONFIGURAZIONE
               props.load(new FileInputStream(fileProperties));
               //LEGGO IL VALORE DI RITORNO
               myReturn = props.getProperty(pKey);
    
              }catch(IOException e) {
              //ReadProprerties.showSimpleMessage("ERRORE NELLA LETTURA DEL FILE CONFIG.PRPERTIES NELLA CHIAVE: " + pKey + "\nERRORE: " + e.getMessage());
              }
              //RITORNA myReturn OPPURE UNA STRINGA VUOTA
              return myReturn ;
    
          }
        public static synchronized void setProperty(String pKey, String pValue) throws IOException{
        Properties properties = new Properties();
        try {
    
    
            properties.load(new FileInputStream(fileProperties));
            properties.setProperty(pKey, pValue);
            } catch (IOException ex) {
                Logger.getLogger(Proprerties.class.getName()).log(Level.SEVERE, null, ex);
            }
            properties.store(new FileOutputStream(fileProperties), null);
    }
    
    
       }
    Ho provato a modificare pure la stringa statica inserendo solo il nome del file, in questo caso il problema nasce sia per l'avvio in ambiente di sviluppo che tramite jar.
    Vi prego aiutatemi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Il mio scopo è far funzionare l'applicativo tramite un semplice file JAR senza ricordarmi di creare,copiare,spostare altri file esterni.........
    Grazie in anticipo
    Luca

    N.B. spero di essere stato chiaro

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    è un problema di path. Il file viene ricercato nella directory corrente, in quella del path e poi si esce. Ti consiglio di includere nel jar il file properties e di metterlo al posto giusto (ad esempio allo stesso livello della classe che lo va a leggere). oppure creare un sistema di path relativi che vengono automaticamente ricercati dalla jvm all'avvio del jar (riferiti al jar stesso)

  3. #3
    Se il file sta dentro al jar devi usare getResourceAsStream:

    http://bit.ly/getResourceAsStream
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da mxa
    Se il file sta dentro al jar devi usare getResourceAsStream:

    http://bit.ly/getResourceAsStream
    ecco non mi veniva questo, ma deve posizionarlo sempre in un posto direttamente accessibile, cioè il problema del path resta

  5. #5
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Io per caricare delle immagini che ho all'interno del jar uso il classloader in combinazione con la classe url, funziona perfettamente.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11
    Ragazzi, perfetto, con il metodo getResourceAsStream la lettura funziona perfettamente, senza usufruire di file esterni.
    E' sorto il problema nel metodo di scrittura, mi da un errore che non so come risolvere.
    La segnalazione è la seguente:

    cannot find symbol
    symbol: method store(<anonymous java.io.Writer>)
    location: class java.util.Properties

    di seguito vi riporto il codice della classe Properties_Write:

    codice:
     public class Proprerties_Write {
    
     
          private Proprerties_Write() {
          }
    
       public static synchronized String getString(String pKey) {
    
               //VALORE DI RITORNO
               String myReturn=null;
               Properties props = new Properties();
    
               try {
               //CARICO IL FILE DI CONFIGURAZIONE
               props.load(Proprerties_Write.class.getResourceAsStream("write_info.properties"));
               //LEGGO IL VALORE DI RITORNO
               myReturn = props.getProperty(pKey);
    
              }catch(IOException e) {
              //ReadProprerties.showSimpleMessage("ERRORE NELLA LETTURA DEL FILE CONFIG.PRPERTIES NELLA CHIAVE: " + pKey + "\nERRORE: " + e.getMessage());
              }
              //RITORNA myReturn OPPURE UNA STRINGA VUOTA
              return myReturn ;
    
          }
     public static synchronized void setProperty(String pKey, String pValue) throws IOException{
        Properties properties = new Properties();
        try {
    
    
            properties.load(Proprerties_Write.class.getResourceAsStream("write_info.properties"));
            properties.setProperty(pKey, pValue);
            } catch (IOException ex) {
                Logger.getLogger(Proprerties_Write.class.getName()).log(Level.SEVERE, null, ex);
            }
            properties.store (new Writer(Proprerties_Write.class.getResourceAsStream("write_info.properties")) {
    
                @Override
                public void write(char[] cbuf, int off, int len) throws IOException {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
    
                @Override
                public void flush() throws IOException {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
    
                @Override
                public void close() throws IOException {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
            });
    }
    }
    Ho evidenziato in rosso il codice che va in errore, di preciso viene evidenziato il metodo STORE.
    Da cosa dipende? vi ripeto, la lettura funziona, l'unico problema rimasto è la scrittura.
    Vi ringrazio per la diritta precedente e per ulteriori consigli.
    Grazie
    Luca

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    vuoi modificare una risorsa che è dentro un jar??
    allora puoi fare una cosa (che secondo me è la migliore):

    all'interno del jar proponi una versione di default delle properties, una che consente alla tua applicazione di funzionare.
    Poi ti fai dare la versione personalizzata dell'utente del suddetto properties: se questa esiste non consideri il default del jar ma solo la versione user. Se non esiste hai comunque un default valido.

    Per cui avrai

    1. file .properties di default dentro il jar
    2. file .properties che puoi passare come parametro (-Dfile=)
    3. file .properties di cui passi il path come parametro (-DfilePath=)
    4. file .properties che metti nella directory di esecuzione.

    Il file che vai a scrivere sarà quello esterno (che hai passato) oppure ne crei uno nella directory di esecuzione del jar runtime (che ovviamente troverai al prossimo avvio).
    Questa a mio parere è una soluzione più ordinata, che ti consente di avere un qualcosa di valido anche nei casi in cui l'utente prova a pasticciare con i file properties (e ovviamente non tocchi il jar mantenedo le funzionalità perfette)

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11
    Perfetto, ragazzi siete stati gentilissimi... ho risolto.
    Per la lettura uso i file di properties, in fase di scrittura uso un database.
    Tutto più semplice è veloce...
    Grazie ancora.
    Luca

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.