Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Terminale non trova la risorsa nel JAR

  1. #1

    Terminale non trova la risorsa nel JAR

    Salve a tutti,
    in riassunto ho un semi-gioco di scacchi in cui le pedine sono delle stringhe riposte in un file txt.
    In una classe (newGame) voglio cancellare il file dell'utente per crearlo uno nuovo e copiarci il contenuto di un altro file txt (conf.txt) che si trova all'interno del jar, sotto la cartella Resources.
    In Eclipse tutto va liscio, ma una volta creato il file JAR che vado ad eseguire da terminale mi dice:
    codice:
    file:/Users/lorenzomazzante/Desktop/ChessGame.jar!/ChessGame/conf.txt (No such file or directory) in questa specifica directory.
    Vi posto il codice di questa funzione:
    codice:
    package ChessGame;
    
    import java.io.*;
    import java.net.URI;
    import java.net.URL;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    
    
    
    
    public class newGame {
    	
    private static final String ArrayPezzi = null;
    
    
        String pathPezziMod;	//	definiamo la variabile in cui inserire in seguito il percorso del file txt
    
    
        public newGame(String pathP) throws FileNotFoundException, IOException {
        	
        	pathPezziMod=pathP;
            File f = new File(pathPezziMod);	// Creo un oggetto file
            boolean success = f.delete();	// Provo a cancellare il file
    
    
             // Se si è verificato un errore...
            if (!success) throw new IllegalArgumentException("Cancellazione fallita");
        	
        	try {
        		File url = new File(this.getClass().getResource("conf.txt").getFile());		// apro il file conf.txt
    			File f2 = new File(pathPezziMod);
    			InputStream in = new FileInputStream(url);
    			OutputStream out = new FileOutputStream(f2, true);
    			byte[] buf = new byte[1024];
    			int len;
    			while ((len = in.read(buf)) > 0) {		// copiatura
    				out.write(buf, 0, len);
    			}
    			in.close();		// chiudo file sorgente
    			out.close();	// chiudo file destinazione
    			System.out.println("RESET SCACCHIERA COMPLETATO");
    		}catch (FileNotFoundException ex) {
    			System.out.println(ex.getMessage() + " in questa specifica directory.");
    			System.exit(0);
    		}catch (IOException e) {
    			System.out.println(e.getMessage());
    		}
        	
        	verConf indirizzonewGame = new verConf(pathPezziMod);    	
        	
        }	//	chiusura newGame
    }	//	chiusura class newGame




    La cartella del progetto è così impostata:
    CG (
    src (
    ChessGame (
    chessGame.java
    inserisci.java
    Legenda.java
    mossa.java
    newGame.java
    package-info.java
    verConf.java
    Visualizza.java
    conf.txt
    )
    )
    )
    JRE SystemLibrary
    )

  2. #2
    Quote Originariamente inviata da LolloMazzy Visualizza il messaggio
    File url = new File(this.getClass().getResource("conf.txt").getFi le()); // apro il file conf.txt
    Due cose:

    1) Se nel .jar c'è alla radice una cartella chiamata ChessGame con dentro conf.txt, allora la specifica della risorsa di per sè è corretta ("conf.txt" è relativo alla classe del this che è newGame che è nel package ChessGame).

    MA

    2) non va bene (e non ha senso) passare per un java.io.File. Oltre a getResource esiste getResourceAsStream che fornisce direttamente un InputStream. Questo va usato, perché il url della risorsa è qualcosa di molto "speciale" e non lo puoi trattare come un path sul file-system.
    Andrea, www.andbin.net – Senior Java developer – SCJP 5 (91%) – SCWCD 5 (94%)
    Il mio blog sulla programmazione

Tag per questa discussione

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 © 2017 vBulletin Solutions, Inc. All rights reserved.