Java problem:Load file from .jar

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
alexo
Venus Former Team Member
Posts: 1305
Joined: Wed Apr 21, 2004 7:00 pm

Java problem:Load file from .jar

Post by alexo » Thu Jun 22, 2006 3:26 am

Έστω αρχείο 1.java MEΣA στο jar.
Αυτό έχει μεταξύ άλλων και το εξής:
File f =new File("arxeio.txt");
Το αρχείο arxeio.txt βρίσκεται επίσης MEΣA στο jar.
Ο παραπάνω κώδικας το αναζητά έξω από το Jar.
Έχει κανείς ιδέα πώς θα γίνει αυτό που λέω;; :roll:
User avatar
Tomahawk
Mbyte level
Mbyte level
Posts: 536
Joined: Tue May 18, 2004 1:50 pm

Post by Tomahawk » Thu Jun 22, 2006 3:40 am

Για δοκιμασε αυτο

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) ;
alexo
Venus Former Team Member
Posts: 1305
Joined: Wed Apr 21, 2004 7:00 pm

Post by alexo » Thu Jun 22, 2006 10:39 am

U are tha man!!
Thanks.
(Tι λαλάκας είμαι ; Το έκανα αυτό στο φόρτωμα των icons.)

EDIT:Δεν παίζει γιατί ο κατασκευαστής του File ΔΕΝ δέχεται σαν όρισμα URL. :-(
User avatar
vangos
Mbyte level
Mbyte level
Posts: 571
Joined: Tue Mar 16, 2004 3:14 pm
Location: Heracleia@UTA

Post by vangos » Thu Jun 22, 2006 11:20 am

Ελα ρε συ, θα υπάρχει κάποια μέθοδος της URL που σου επιστρέφει String. Νομίζω είναι getFile() ή getPath() ή κάτι παρόμιο.
alexo
Venus Former Team Member
Posts: 1305
Joined: Wed Apr 21, 2004 7:00 pm

Post by alexo » Thu Jun 22, 2006 11:52 am

vangos wrote:Ελα ρε συ, θα υπάρχει κάποια μέθοδος της URL που σου επιστρέφει String. Νομίζω είναι getFile() ή getPath() ή κάτι παρόμιο.
Λογικά θα παίζει,θα το τσεκάρω όταν γυρίσω σπίτι.
Ήταν πρωί και το έκανα toString()...lol
User avatar
J'ohn
byte level
byte level
Posts: 60
Joined: Sun Oct 09, 2005 12:06 pm
Location: Χαλάνδρι

Post by J'ohn » Thu Jun 22, 2006 4:30 pm

Η 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 :)
alexo
Venus Former Team Member
Posts: 1305
Joined: Wed Apr 21, 2004 7:00 pm

Post by alexo » Thu Jun 22, 2006 4:58 pm

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,παίδες.
alexo
Venus Former Team Member
Posts: 1305
Joined: Wed Apr 21, 2004 7:00 pm

Post by alexo » Thu Jun 22, 2006 7:32 pm

Τελικά έχει πιο πολύ μανούρα απ'όσο φανταζόμουν..
Τα παραπάνω δεν παίζουν.
Δείτε και αυτό http://forum.java.sun.com/thread.jspa?t ... 55&start=0
User avatar
Tomahawk
Mbyte level
Mbyte level
Posts: 536
Joined: Tue May 18, 2004 1:50 pm

Post by Tomahawk » Fri Jun 23, 2006 3:13 pm

Το διαβασα το link.
Σε διαβεβαιωνω οτι δεν θελει σιγουρα τοση μανουρα!!
Οτι κωδικα εχω κατεβασει μεχρι τωρα,που ειναι ετοιμος για jar bundling χρησιμοποιει ακριβως αυτες τις κλησεις.

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

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

Πρεπει κατι να σου διαφευγει εσενα.Καποιο μικρο λαθακι.
Αν θες κανε post κωδικα και file structure.
User avatar
HdkiLLeR
Venus Project Founder
Venus Project Founder
Posts: 4356
Joined: Tue Jan 27, 2004 4:41 pm
Academic status: Alumnus/a
Gender:
Location: New York, NY
Contact:

Post by HdkiLLeR » Fri Jun 23, 2006 3:44 pm

Στην τελική κάνε post εδώ ένα μικρό απόσπασμα του κώδικα σου για να το τσεκάρουμε.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------

"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie
User avatar
Einherjar
Venus Project Founder
Venus Project Founder
Posts: 3751
Joined: Tue Jan 27, 2004 4:42 pm
Academic status: Alumnus/a
Gender:
Location: Washington DC, USA
Contact:

Post by Einherjar » Fri Jun 23, 2006 4:01 pm

Σε συνέχεια αυτού που λέει ο Tomahawk κάνεις κάτι σαν:

Code: Select all

InputStream is = getClass( ).getResourceAsStream("/META-INF/arxeio.txt");
[Better to understand a little than to misunderstand a lot]
alexo
Venus Former Team Member
Posts: 1305
Joined: Wed Apr 21, 2004 7:00 pm

Post by alexo » Fri Jun 23, 2006 4:02 pm

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

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

Code: Select all

if (η class βρίσκεται σε jar) κάνε ...
else κάνε...
User avatar
Tomahawk
Mbyte level
Mbyte level
Posts: 536
Joined: Tue May 18, 2004 1:50 pm

Post by Tomahawk » Fri Jun 23, 2006 4:21 pm

Τοτε κατι ειναι λαθος.Αυτο δεν θα επρεπε να συμβαινει.Ο ιδιος κωδικας θα πρεπει να δουλευει ασχετως αν ειναι bundled η οχι.Δεδομενου φυσικα οτι το classpath ειναι σωστα ορισμενο ειτε σε cmd ειτε στο MANIFEST.MF στο jarfile.
Θα σε παρακαλουσα να κανεις paste τον κωδικα και το file structure
Post Reply

Return to “Προγραμματισμός”