Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Problema file di testo da cd

    Salve ragazzi avrei bisogno del vostro aiuto per un piccolo problema
    Sto facendo un progetto java ,ho scritto tutte le classi ,l'ho eseguito e funziona perfettamente da JCreator.Poi ho creato il file jar e alla fine ho messo il tutto all'interno di un CD.

    Ora aggiungo dicendo che in una mia funzione c'è un metodo che richiama un file di testo all'interno di una cartella del cd(la cartella classes), che è la stessa cartella dove è anche presente il file jar.
    Appena vado a lanciare il file jar da prompt dei comandi tutto funziona perfettamente tranne il fatto che non legge file di testo.
    Quindi mi dà come errore "Impossibile trovare il file specificato"
    Che devo fare?Mi dà questo problema solamente andandolo ad eseguire da CD,altrimenti funziona perfettamente.

    Vi posto la funzione nella quale uso i file di java

    codice:
    String [] str = new String[10];
    		try{
    
    		for(int i=0;i<10;i++)
    			str[i]="";
        	FileInputStream fstream = new FileInputStream(file_tempi+".txt");
        	BufferedReader br = new BufferedReader(new InputStreamReader(ClassLoader.getSystemClassLoader().getResourceAsStream(file_tempi+".txt")));
        	String strLine;
        	int k=0;
        	while ((strLine = br.readLine()) != null && k<10){
        		str[k] = strLine;
        		k++;
        	}
        	fstream.close();
    
            }catch (Exception e){
                System.err.println("Errore: " + e.getMessage());//si usa System.err
            }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,306
    Prima cosa.

    codice:
    FileInputStream fstream = new FileInputStream(file_tempi+".txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(ClassLoader.getSystemClassLoader().getResourceAsStream(file_tempi+".txt")));
    Una delle due righe è superflua e, di conseguenza, errata: o carichi il file usando getResourceAsStream() o lo carichi usando FileInputStream... che poi nel resto del codice usi il BufferedReader creato dal getResource() per cui la prima riga la puoi anche togliere che tanto è inutile (fstream, infatti, non lo usi da nessuna parte, se non alla fine dove lo chiudi, senza averlo mai usato).

    Seconda cosa:
    La prima riga (quella che al momento risulta inutile nel tuo codice) legge un file fisico, mentre la seconda legge una risorsa (quindi un file che dovrebbe trovarsi dentro al JAR).

    Terza cosa: non sappiamo cosa sia "file_tempi", o meglio, quale sia il suo valore.

    Cercherei di chiarirmi le idee sui due concetti.
    Se il file si trova fuori dal JAR, dovrai usare un FileInputStream (o meglio, userei un FileReader), quindi creare un BufferedReader in questo modo:

    codice:
    FileReader fr = new FileReader(file_tempi + ".txt");
    BufferedReader br = new BufferedReader( fr );
    Se il file si trova dentro al JAR devi usare getResourceAsStream() come hai fatto tu...

    Ultima cosa: non ammazzare le eccezioni. Quando viene sollevata un'eccezione, falle stampare lo stackTrace, così almeno puoi avere tutte le informazioni necessarie a capire cosa è andato in errore e, soprattutto, dove.

    codice:
    } catch (Exception e) {
       e.printStackTrace();
    }
    Prova ad eseguire il programma dopo aver aggiunto la stampa dello stackTrace così ti rendi conto di quale sia l'istruzione che genera l'errore ed, eventualmente, postalo qui.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    il file_tempi(che contiene del testo) l'ho aggiunto solo in un secondo momento nel jar
    Comunque si è dentro al jar
    Però ti ripeto ,il progetto con i metodi java è all'interno di un cd e devo farlo partire lanciando il file jar da terminale .E' questo il problema che mi dava ,cioè non riusciva a trovare ilo file.
    E poi un'altra domanda usando il ClassLoader è possibile poi far eseguire normalmente il progetto senza usare il jar.
    Calcola che i file da richiamare li ho inclusi nel jar ma si trovano anche nella cartella classes

  4. #4
    scusami avrei un'altra domanda
    ma lanciando ed eseguendo il codice del progetto da file jar
    perchè aprendo JCreator e selezionando il progetto da CD-ROM mi dice accesso negato e non me lo fa compilare?
    Non riesco a capire,ma è una cosa normale??

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,306
    Originariamente inviato da elpibegiulio
    il file_tempi(che contiene del testo) l'ho aggiunto solo in un secondo momento nel jar
    Non parlavo del contenuto del file, ma del contenuto della variabile di nome "file_tempi".

    Comunque si è dentro al jar
    Allora togli la riga della creazione del FileInputStream

    Però ti ripeto ,il progetto con i metodi java è all'interno di un cd e devo farlo partire lanciando il file jar da terminale .E' questo il problema che mi dava ,cioè non riusciva a trovare ilo file.
    Che il JAR sia in un CD, in una cartella di rete, in una chiavetta USB, a Java non gliene può fregare di meno. Il problema, semmai, è il sollevarsi di un eccezione. Se viene sollevata un'eccezione (per un qualunque motivo a noi ignoto), il programma può non funzionare nel modo previsto. E' per questo che è importante non uccidere le eccezioni, ma far sempre stampare lo stackTrace.

    E poi un'altra domanda usando il ClassLoader è possibile poi far eseguire normalmente il progetto senza usare il jar.
    Questa frase non ha senso: il ClassLoader è una classe particolare usata dalla JVM che si occupa proprio di caricare le classi. Poco importa dove stiano queste classi (in un JAR oppure scolte). La frase che hai detto è come se cercassi di far partire un eseguibile... senza l'eseguibile.

    Calcola che i file da richiamare li ho inclusi nel jar ma si trovano anche nella cartella classes
    La cartella "classes" viene usata solo ed esclusivamente dall'ambiente di sviluppo: quella cartella poi viene impacchettata nel JAR che si trova, tipicamente, nella directory "dist", che è tutto ciò di cui hai bisogno (assieme, ovviamente, alle eventuali librerie esterne). Ignorala.

    E' anche il motivo per cui la tua applicazione funziona se non viene lanciata dal CD: tu stai usando risorse (i file sciolti) che servono all'ambiente di sviluppo e non quelle che dovrebbe realmente usare l'applicazione.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,306
    Originariamente inviato da elpibegiulio
    perchè aprendo JCreator e selezionando il progetto da CD-ROM mi dice accesso negato e non me lo fa compilare?
    Ehh??? Cosa stai cercando di aprire da JCreator? L'unità CD-ROM non è scrivibile...
    Stai facendo un minestrone: il progetto di JCreator va lasciato stare lì dov'è (nel tuo HardDisk).
    Dentro al CD-ROM ci deve finire solo il contenuto della directory "dist" del progetto... ovvero, il risultato della compilazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Ok ora funziona lanciando il jar da terminale su cd

    IL PROBLEMA CHE TI DICEVO PERO' RIMANE
    Apro JCreator , vado su Import Workspace seleziono il progetto da cd e mi dice
    Access was denied to D:\Progetto\src_project......
    non me lo fa compilare da cd
    questo volevo sapere
    è normale come cosa?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,306
    Originariamente inviato da elpibegiulio
    Ok ora funziona lanciando il jar da terminale su cd

    IL PROBLEMA CHE TI DICEVO PERO' RIMANE
    Apro JCreator , vado su Import Workspace seleziono il progetto da cd e mi dice
    Access was denied to D:\Progetto\src_project......
    non me lo fa compilare da cd
    questo volevo sapere
    è normale come cosa?
    Sì è normalissimo... e ti ho risposto prima sul perchè. L'unità CD-ROM non è scrivibile... questo vale, in generale, per qualunque PC, su qualunque sistema operativo... per scrivere su un CD si deve ricorrere alla "masterizzazione", che non è un normale processo di scrittura... quindi, perchè mai hai copiato il progetto su CD? Non ha alcun senso...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    grazie
    cmq l'ho copiato semplicemente perchè chi lo riceve deve poter leggere il codice

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