Page 1 of 1

Java problem:Load file from .jar

Posted: Thu Jun 22, 2006 3:26 am
by alexo
Έστω αρχείο 1.java MEΣA στο jar.
Αυτό έχει μεταξύ άλλων και το εξής:
File f =new File("arxeio.txt");
Το αρχείο arxeio.txt βρίσκεται επίσης MEΣA στο jar.
Ο παραπάνω κώδικας το αναζητά έξω από το Jar.
Έχει κανείς ιδέα πώς θα γίνει αυτό που λέω;; :roll:

Posted: Thu Jun 22, 2006 3:40 am
by Tomahawk
Για δοκιμασε αυτο

Code: Select all

String fileName = "arxeio.txt";
URL fileURL = this.getClass().getResource( fileName );
File f = new File( fileURL );
or

Code: Select all

URL fileURL = YourClass.class.getResource( fileName) ;

Posted: Thu Jun 22, 2006 10:39 am
by alexo
U are tha man!!
Thanks.
(Tι λαλάκας είμαι ; Το έκανα αυτό στο φόρτωμα των icons.)

EDIT:Δεν παίζει γιατί ο κατασκευαστής του File ΔΕΝ δέχεται σαν όρισμα URL. :-(

Posted: Thu Jun 22, 2006 11:20 am
by vangos
Ελα ρε συ, θα υπάρχει κάποια μέθοδος της URL που σου επιστρέφει String. Νομίζω είναι getFile() ή getPath() ή κάτι παρόμιο.

Posted: Thu Jun 22, 2006 11:52 am
by alexo
vangos wrote:Ελα ρε συ, θα υπάρχει κάποια μέθοδος της URL που σου επιστρέφει String. Νομίζω είναι getFile() ή getPath() ή κάτι παρόμιο.
Λογικά θα παίζει,θα το τσεκάρω όταν γυρίσω σπίτι.
Ήταν πρωί και το έκανα toString()...lol

Posted: Thu Jun 22, 2006 4:30 pm
by J'ohn
Η File έχει κατασκευαστή με όρισμα URI (όχι URL) και τα URLs μπορείς να τα κάνεις URIs με την μέθοδο toURI() οπότε αν κάνεις

Code: Select all

String fileName = "arxeio.txt";
URL fileURL = this.getClass().getResource( fileName );
File f = new File( fileURL.toURI() );
θα δουλέψει.

(συγνώμη για το hijack του κώδικα, Tomahawk)

SBS :)

Posted: Thu Jun 22, 2006 4:58 pm
by alexo
J'ohn wrote:Η File έχει κατασκευαστή με όρισμα URI (όχι URL) και τα URLs μπορείς να τα κάνεις URIs με την μέθοδο toURI() οπότε αν κάνεις

Code: Select all

String fileName = "arxeio.txt";
URL fileURL = this.getClass().getResource( fileName );
File f = new File( fileURL.toURI() );
θα δουλέψει.

(συγνώμη για το hijack του κώδικα, Tomahawk)

SBS :)
το δοκίμασα το πρωί αλλά βιαζόμουνα..
Μου ζήταγε try-catch αλλά δεν είχα χρόνο..
Παίζει να παίζει (!) και αυτό.
Thanks,παίδες.

Posted: Thu Jun 22, 2006 7:32 pm
by alexo
Τελικά έχει πιο πολύ μανούρα απ'όσο φανταζόμουν..
Τα παραπάνω δεν παίζουν.
Δείτε και αυτό http://forum.java.sun.com/thread.jspa?t ... 55&start=0

Posted: Fri Jun 23, 2006 3:13 pm
by Tomahawk
Το διαβασα το link.
Σε διαβεβαιωνω οτι δεν θελει σιγουρα τοση μανουρα!!
Οτι κωδικα εχω κατεβασει μεχρι τωρα,που ειναι ετοιμος για jar bundling χρησιμοποιει ακριβως αυτες τις κλησεις.

Παντως εγω αν καταλαβα καλα το μονο που τονιζουν ειναι οτι πρεπει να δηλωσεις και το path.
Οποτε αν ειναι σε φακελο "κατω" απο αυτον της κλασης πρεπει να το δηλωσεις αν και αυτο το ηξερες και απο μονος σου.

Για να αποφυγεις τον κωδικα με τα URL kai URI υπαρχει και η μεθοδος getRecourceAsStream() που θα σου επιστρεψει κατευθειαν object InputStream για το διαβασμα.Αυτο σημαινει επισης οτι δεν εχεις write.

Πρεπει κατι να σου διαφευγει εσενα.Καποιο μικρο λαθακι.
Αν θες κανε post κωδικα και file structure.

Posted: Fri Jun 23, 2006 3:44 pm
by HdkiLLeR
Στην τελική κάνε post εδώ ένα μικρό απόσπασμα του κώδικα σου για να το τσεκάρουμε.

Posted: Fri Jun 23, 2006 4:01 pm
by Einherjar
Σε συνέχεια αυτού που λέει ο Tomahawk κάνεις κάτι σαν:

Code: Select all

InputStream is = getClass( ).getResourceAsStream("/META-INF/arxeio.txt");

Posted: Fri Jun 23, 2006 4:02 pm
by alexo
Τελικά έπαιξε.
ΑΛΛΑ:
1)ήθελε / πριν το όνομα του αρχείου
δλδ. filename="/arxeio.txt" ,παρόλο που το αρχείο βρίσκεται στο ίδιο directory με την main class και

2)τρέχει μόνο σε jar (!). Όταν το τρέχω από cmd πετάει exception.Γι'αυτό και κάπου στο link που παραθέτω έχει κώδικα της μορφής :

Code: Select all

if (η class βρίσκεται σε jar) κάνε ...
else κάνε...

Posted: Fri Jun 23, 2006 4:21 pm
by Tomahawk
Τοτε κατι ειναι λαθος.Αυτο δεν θα επρεπε να συμβαινει.Ο ιδιος κωδικας θα πρεπει να δουλευει ασχετως αν ειναι bundled η οχι.Δεδομενου φυσικα οτι το classpath ειναι σωστα ορισμενο ειτε σε cmd ειτε στο MANIFEST.MF στο jarfile.
Θα σε παρακαλουσα να κανεις paste τον κωδικα και το file structure