Domanda Accedi al file jar?


Devo essere in grado di accedere a un file memorizzato in un file jar compilato. Ho capito come aggiungere il file al progetto, ma come faccio a fare riferimento al codice? Come posso copiare un file dal file jar in una posizione sul disco rigido dell'utente? So che ci sono dozzine di modi per accedere a un file (FileInputStream, FileReader, ect.), Ma non so come guardare dentro se stesso.


10
2018-03-02 18:51


origine


risposte:


Potresti usare qualcosa come questo:

InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileFromJarFile);

Se foo.txt era nella radice del tuo file JAR, dovresti usare:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("foo.txt");

Suppongo che la classe sia nello stesso file JAR della risorsa, credo.


20
2018-03-02 18:55



Si può leggere il contenuto di un file JAR usando il JarFile classe.

Ecco un esempio di come è possibile ottenere un file specifico da un file JAR ed estrarlo:

JarFile jar = new JarFile("foo.jar");
String file = "file.txt";
JarEntry entry = jar.getEntry(file);
InputStream input = jar.getInputStream(entry);
OutputStream output = new FileOutputStream(file);
try {
    byte[] buffer = new byte[input.available()];
    for (int i = 0; i != -1; i = input.read(buffer)) {
        output.write(buffer, 0, i);
    }
} finally {
    jar.close();
    input.close();
    output.close();
}

4
2018-03-02 19:05



Puoi usare getResource () ottenere un URL per un file sul classpath, o getResourceAsStream () per ottenere invece un InputStream.

Per esempio:

BufferedReader reader = new BufferedReader(new InputStreamReader(
    this.getClass().getResourceAsStream("foo.txt")));

4
2018-03-02 18:54



Volevo solo aggiungere che se vogliamo accedere al file all'interno di Jar che si trova nel seguente percorso:

Windows:  
c:\your-jar-file.jar\dir1\dir2\dir3\foo.txt

Linux: 
/home/your-jar-file.jar/dir1/dir2/dir3/foo.txt

Dovrà usare il seguente codice (fai attenzione che non ci sia NO "/" (avanti-barra) carattere all'inizio del percorso):

InputStream is = this.getClass().getClassLoader().getResourceAsStream("dir1/dir2/dir3/foo.txt");

1
2018-02-21 23:12



Guarda la classe JarFile. C'è tutto ciò che serve per ottenere l'InputStream di una voce specifica nel file jar.


0
2018-03-02 18:53