Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    50

    [Java] Differenza nell'uso della directory corrente

    Salve a tutti, ho un piccolo problema con un programma che ho scritto.

    Ho creato un programma che all'avvio ha bisogno di trovare la directory in cui si trova il file che sto eseguendo.
    Quindi ho utilizzato il comando:
    codice:
    File file = new File (System.getProperty ("java.class.path"));
    Home.directoryDiLavoro = file.getAbsoluteFile().getParentFile().toString();
    Uso poi il percorso a quel file per aprire un altro file, che so essere in una sua sottodirectory
    codice:
    Home.pathElencoCanzoni= directoryDiLavoro + "/Data/elenco_canzoni.txt";
    Eseguendo il programma all'interno di Eclipse non ho mai avuto problemi, ma se provo ad eseguirlo da shell mi dice:

    Errore nella creazione di elenco_canzoni.txt: java.io.FileNotFoundException: C:\
    Program Files\Java\Eclipse\JArt\bin\.;.;c:\PROGRA~1\java\l ib\sound.jar;c:\PROGRA
    ~1\java\lib\jmf.jar;c:\PROGRA~1\java\lib;C:\Window s\java\Data\elenco_canzoni.txt
    (La sintassi del nome del file, della directory o del volume Þ incorretta)


    Allora ho messo un semplice
    codice:
    System.out.println(file.getAbsoluteFile().getParentFile().toString());
    e mi è venuto sulla shell:
    C:\Program Files\Java\Eclipse\JArt\bin\.;.;c:\PROGRA~1\java\l ib\sound.jar;c:\PRO
    GRA~1\java\lib\jmf.jar;c:\PROGRA~1\java\lib;C:\Win dows\java

    invece di quello che ho eseguendo da Eclipse:
    C:\Program Files\Java\Eclipse\JArt


    A cos'è dovuto questo errore e come faccio a indicargli che sta guardando la cartella sbagliata?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281

    Re: [Java] Differenza nell'uso della directory corrente

    Originariamente inviato da Tirrel
    codice:
    File file = new File (System.getProperty ("java.class.path"));
    Alt. Qui è vago. Nel senso che il "classpath" può essere anche una lista di directory/file jar!! (e quindi non va certo bene passarlo ad un java.io.File!!)
    Solo se avvii la applicazione lanciando direttamente il jar con:

    java -jar tuaapp.jar

    allora (da quello che so e per esperienza personale), la property "java.class.path" è proprio solo quel jar.

    Se ti serve sapere il percorso assoluto della directory "corrente", crea un File con il "." e poi prendine il path assoluto con getAbsoluteFile/getAbsolutePath.
    Se ti serve semplicemente aprire un file "sapendo" che è relativo alla directory corrente, le classi di I/O (e altro) che ricevono un pathname possono farlo direttamente es. new FileInputStream("pippo.txt") è relativo alla directory "corrente".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    50
    Ok, ho provato a mettere
    codice:
    File file = new File (".");
    Home.directoryDiLavoro = file.getAbsoluteFile().getParentFile().toString();
    da Eclipse non è cambiato niente (il percorso è sempre "C:\Program Files\Java\Eclipse\JArt")

    Comunque se da shell provo a dare i comandi:

    C:\Program Files\Java\Eclipse\JArt>javac src\*.java
    C:\Program Files\Java\Eclipse\JArt>java src\Home.class

    mi da come errore:

    Exception in thread "main" java.lang.NoClassDefFoundError: src\Home/class
    Caused by: java.lang.ClassNotFoundException: src\Home.class
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    Could not find the main class: src\Home.class. Program will exit.

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Tirrel
    Comunque se da shell provo a dare i comandi:

    C:\Program Files\Java\Eclipse\JArt>javac src\*.java
    C:\Program Files\Java\Eclipse\JArt>java src\Home.class

    mi da come errore:

    Exception in thread "main" java.lang.NoClassDefFoundError: src\Home/class
    Caused by: java.lang.ClassNotFoundException: src\Home.class
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    Could not find the main class: src\Home.class. Program will exit.
    È giusto che dia errore, non è così che si avvia un programma java!
    Ad esempio, non devi indicare l'estensione .class
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    50
    Avevo provato senza l'estensione .class e mi dava una listaccia di errori anche lì:

    Exception in thread "main" java.lang.NoClassDefFoundError: src\Home (wrong name:
    Home)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknow n Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    Could not find the main class: src\Home. Program will exit.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    50
    Scusate, ma cosa c'è di sbagliato?
    Prima gli faccio compilare tutti i file e poi eseguo quello contenente il main.

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Tirrel
    Avevo provato senza l'estensione .class e mi dava una listaccia di errori anche lì:
    Entra nella cartella src e digita java Home dall'interno. Se neanche così funziona, spiega meglio la situazione: le tue classi fanno parte di un package?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    50
    Si, così parte.
    Ma non capisco perché, se provo ad avviarlo dalla cartella superiore, mi dice che non trova le altre classi.
    Non le cerca nella stessa cartella di "Home"?

    e diciamo di si, fanno parte del package di default

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    50
    Come posso impostare il mio programma in modo che funzioni sia avviandolo da shell, sia da Eclipse?
    Ora ho messo le classi in un package, ma cambia poco.

    Ho messo tutte le classi nel percorso
    C:\Program Files\Java\Eclipse\JArt\src\pckJArt

    e i file che devo aprire sono in
    C:\Program Files\Java\Eclipse\JArt\Data


    Per utilizzare i file faccio:

    File file = new File (".");
    Home.directoryDiLavoro= file.getCanonicalPath();

    e infine, per far partire il programma da shell, uso i comandi:

    > javac *.java
    > java Home


    Ciò nonostante, mi dice che non trova la main class Home.
    Idee?

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quale è l'eccezione?
    La compilazione su Eclipse non è fatta a caso, se crei dei package, i .class vengono messi in una struttura ad albero che parte da bin(o classes) e ripete i package esattamente come li trova sotto src.

    Netbeans ad esempio non crea la cartella bin (o classes) ma mette i .class nella stessa cartella dei sorgenti e nel jar che trovi in dist esporta solo . class

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.