
Originariamente inviata da
peppesbe
al momento però non riesco a trovare il modo per acquisisre il Path dove si trova il database.
In sostanza usando la seguente:
String pathDB=System.getProperty("user.dir") + "\\bin\\DataBase.sqlite"
La property "user.dir" rappresenta la directory "corrente" ed è molto vaga, nel senso che dipende da diversi fattori. Quindi non va granché bene. Io dicevo la directory "home" dell'utente (su Windows qualcosa tipo C:\Users\Andrea, sui Linux qualcosa tipo /home/andrea ). E questa si rintraccia con la system property "user.home".
Tipicamente sotto la home dell'utente si mette una directory specifica per l'applicazione. Che sempre tipicamente per convenzione (e per "copiare" un po' il comportamento dei Linux, inizia con il punto "." )
Quindi in codice, qualcosa del tipo (non l'ho provato ora):
codice:
File appDir = new File(System.getProperty("user.home"), ".myapp");
appDir.mkdir(); // assicura che la .myapp sia creata se non esiste (mi aspetto che la home esista!)
File sqliteFile = new File(appDir, "DataBase.sqlite");
if (!sqliteFile.exists()) {
// il file del db NON esiste ... crealo!
}

Originariamente inviata da
peppesbe
Come devo fare per unsare il principio delle risorse [COLOR=#333333]getResource/getResourceAsStream di java.lang.Class?
Metti il file "iniziale" del DB in un certo package, es. com.esempio.myapp.resources
Se in questo package ci metti una classe di utilità es. AppResources:
codice:
package com.esempio.myapp.resources;
public class AppResources {
.....
// qui puoi fare
InputStream is = AppResources.getClass().getResourceAsStream("DefaultDataBase.sqlite");
}
DefaultDataBase.sqlite in questo modo è relativo al package della classe e se il file è in quello stesso package, la JVM lo trova di certo.
Ottieni un InputStream, devi copiare tu tutto il contenuto in quel file referenziato da sqliteFile di prima. Si tratta di I/O banale/basilare che DEVI conoscere. Altrimenti ci sono librerie apposite che hanno metodi di utility per copiare da InputStream a File e anche altro.
P.S. ho visto l'altra tua discussione. Te lo dico subito: NON ti serve sapere il nome e/o il percorso del jar. Anche se teoricamente/tecnicamente è fattibile, è brutto farlo oltre che "critico".