Accessing files inside JAR archives

I have a jar file with structure as follows
. root directory containing *.class files
.\dll directory containing *.dll files
.\images directory containing *.gif and *.jpg files
Now, when i want to load the dll i use
System.loadLibrary("dll/sendlib");or to load an image
ImageIcon i = new ImageIcon("images/"+filename);This works perfectly when the program is not packed in a jar file. I have seen previously that you can use getResourceAsStream(), but in my case it won't work, since it's not class files i'm after. Anyone who have got this to work? Is there some special options in the manifest file that needs to be set, or is the directory structure inside the jar file not the same as outside? How shall i do to load my files?

if u r using jar file u have to create url object.
i.e
URL url = MainclassName.this.getClass ().getResource("/images/"+fileName);
ImageIcon i = new ImageIcon(url);
it will work. MainclassName is the name of ur main class
Paddy

Similar Messages

  • Invisible class files inside jar archives

    Hi!
    After developing an application with J2SE 1.4.1_05, under Windows 98, using some packages archived in jar files, I cannot launch the application with the J2RE 1.4.2_02 or J2SE 1.4.2_02 (in the same Windows 98) because the class files in the jars are not 'visible', even if the CLASSPATH is set up correctly. The only classes that work right are the unpacked ones. But it still does work in Windows 2000.
    What might be wrong?

    Thank you for your answer, and excuse me if my question was kind of confusing.
    The issue here is that the files ARE in the jar files (without './' on the front), but in the environment (Windows 98 + J2RE 1.4.2_02) the application does not work, unless I unpack the jars and use the packages in the same manner I did during the development stage (for example, all classes of package 'myutils' in the folder 'myutils').
    The weird thing is that this DOES NOT happen in the environment (Windows 2000 + J2RE 1.4.2_02)!!! Just after installing the J2RE 1.4.2_02 under Win2K, the app does work OK! That is why it seems that ONLY in the first case (Windows 98 + J2RE 1.4.2_02) the class files inside the jars seem to be 'invisible' to the environment.
    As I have mentioned in my question, the app was developed in the environment (Windows 98 + J2RE 1.4.1_05), and it did still work with the jar files, so I wonder if there might be some compatibility between Windows 98 and the J2RE 1.4.2_02.
    Except my own jars, the same thing does happen with the jai_core.jar file coming with JAI 1.1.2. But this does not happen when it comes about rt.jar, in ..\jre\bin!!!
    All in all, the question still is: what might be wrong?

  • Accessing files inside JAR

    Hello !
    I have a HTML file inside a JAR file. The HTML file uses images and stylesheet located in the same dir in the JAR.
    I need to access the HTML file so that I can open it in a JEditorPane for displaying as a normal HTML. I've been trying to access it with some examples i've gotten from the forum from previous posts, without any success. Could someone PLS post me some examples or point me to a webbie with some tutorial.
    I've already tried the following:
    editorPane = new JEditorPane(this.getClass().getResource("/file.html"));Oh, it is a stand-alone application, and all the files are in the same JAR. =)

    Try it this way:
    editorPane = new JEditorPane(ClassLoader.getSystemResource("file.html"));
    -Ron

  • Access wav-files in jar-archives (URL works, File works not)

    Hi there!
    The un-jar-ed application works fine, but I have a problem with accessing files in jar archives.
    URL url = Classname.class.getResource("testdir/test.wav");works fine (and loading images works this way), but as soon as I try to get the file
    File file = new File(url.getFile());I get an null-exception.
    (in my case, I use the jmf package to play the sound-files, and I get the problem when I try to instatiate the MediaLocator
    MediaLocator mediaLocator = new MediaLocator(url);but I think the problem is the same)
    Thanx for help

    works fine Then keep doing it that way. What's the problem? It's true that you can't access something in a jar archive via a File object, so don't do that.

  • How to edit a text file inside jar

    Hi all;
    I have a code that created text file and put this file to other jar archive.
    How can I edit this text file inside jar, add string to this file ?
    Thanks,

    Unpack the jar, edit the file, repack the jar.

  • How to use database file within jar archive

    Hi. I'm quite new in Java programming, and I'm wondering if what I did makes sense or not.
    In my applet I'm using a MS Access Database file, which is contained in the same Jar Archive like the Applet class file. I tried and tried to use this Database file directly but it wouldn't work. Than I read in some other forum that it is not possible to use the database file directly within the archive. First question: Is that true?
    Than I desided to extract the DB file in the init() method of my applet to the default temporary foulder. When the program is closed I use the destroy() method to delete it again. Everything works well now. But is this the typical way this is done?
    Thanks for help!

    Hi,
    here is the code which extracts the database file out of the jar archive (the same archive in which the class file is):
    //get the user temporary folder
    File TempFolder = new File(System.getProperty("java.io.tmpdir"));
    //create (empty) db file
    efile = new File(TempFolder, "steelSections.mdb");
    // if database file is not yet extracted
    if (!efile.exists()) {
    //get an input stream for the database file
    InputStream in = new BufferedInputStream(this.getClass().getClassLoader().getResourceAsStream(
    "FaST/db/steelSections.mdb"));
    //create an output stream for the db file on the file system
    OutputStream out = new BufferedOutputStream(new FileOutputStream(efile));
    //-Buffer to copy the data
    byte[] buffer = new byte[2048]; //buffer to copy the binary
    for (;;) {
    int nBytes = in.read(buffer); //read data
    if (nBytes <= 0)
    break; //no more data to read
    out.write(buffer, 0, nBytes); //write data
    out.flush(); //close out and in streams
    out.close();
    in.close();
    If you have the db file in an other jar archive file you need a referenze to the entry in the other jar archive. I'm not sure how to get this, but I'm sure you fill find a solution by searching in this forum...
    Good luck!

  • Opening html files inside jar

    Hi,
    I'm making a program where i have a set of help files in the form of html and i would like to open them when the user clicks the "Help" button and I used this code at first
    try
         Desktop.getDesktop().browse(new URI("resources/html/help.html"));
    catch (Exception ex)
         JOptionPane.showMessageDialog(null, "Could not open help.html in default browser\n", "Error", JOptionPane.ERROR_MESSAGE);
    }However after I made the jar and tried to execute on another computer however, it wouldn't work and would display the error message. I was wondering if there was some way that I could open the help.html in their default browser, or maybe a frame if that works, from the jar and have my program still be platform independent?

    ok so i just realized that it doesn't make sense for a program outside the jar, like IE or Firefox, to be able to access and open a file inside of the jar. I am now looking for suggestions on how to work around this problem for my program to be able to have a simple help system located inside the jar that can be loaded during runtime.
    Thanks for your suggestions.

  • Validating xml-files inside jar-files  for JWS

    I want to use xml-files inside a jar-file and want to validate them with dtd-files,
    located in the same jar-file. This does work, but only as long as the dtd-file is
    in the same directory as the xml-file.
    For example, I have no problem, with a DOC Type-statement like
    <!DOCTYPE questestinterop SYSTEM "ims_qtiv1p1.dtd" >
    With this statement, however, one needs an approprate dtd in every directory containing an XML-file of that type.
    If however i want to gather the necessary dtd's in a directory one (or more) levels above with a DOCTYPE-statement of the form
    <!DOCTYPE questestinterop SYSTEM "../ims_qtiv1p1.dtd" >
    I get error messages of the form
    java.io.FileNotFoundException: JAR entry Mikro/Marshall/BookQuestions/../ims_qtiv1p1.dtd not found in C:\Dokumente und Einstellungen\wreiss\Anwendungsdaten\Sun\Java\Deployment\javaws\cache\http\Dwiwi.upb.de\P80\DM~vwl08\DMOViSS\DMoviss_current\RMMikro.jar
         at org.apache.crimson.parser.Parser2.fatal(Unknown Source)
         at org.apache.crimson.parser.Parser2.externalParameterEntity(Unknown Source)
         at org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Unknown Source)
         at org.apache.crimson.parser.Parser2.parseInternal(Unknown Source)
         at org.apache.crimson.parser.Parser2.parse(Unknown Source)
         at org.apache.crimson.parser.XMLReaderImpl.parse(Unknown Source)
         at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(Unknown Source)
         at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
         at oviss.competenceCenter.XMLExpert.setElements(XMLExpert.java:245)
    though the dtd-file is in the parent-directory (inside the jar) and the unpacked xml-file can be successfully validated.
    Why does this happen. How can one use a single dtd for multiple xml-files (of the same type) in different directories?.
    Thanks
    Winfried Reiss

    In reply to myself, replacing the HTMLBrowser constructor with this;
    public HTMLBrowser()
                  URL url;
                  try
                       // Construct the URL
                       url= this.getClass().getResource('/'+dir+'/'+startPage);
                       setPage(url);
                  catch (Exception e)
                  System.out.println( "Problem setting help homepage");
                 setEditable(false);
                 addHyperlinkListener(new LinkListener(this));
            }made it work. This is because seemingly you need '/' at the start of the resouce's path and '/' as the separator, regardless of platform.
    I hope this helps someone else.
    John

  • Accessing resource files inside Jar using Fat Jar Eclipse plugin

    Hi,
    I want to develop single JAR file that uses a set of other JAR libraries. I am using Fat Jar Eclipse plugin. It works fine. However, I have problem to access resources files (i.e. rdf file) using relative path from my classes. Is there any idea how can I pack, set classpath and use relative path in order to make it works.
    Thanks
    Zoran

    I have solved this problem. The problem was in a way how I have trying to access it. It should be like:
    URL fileURL = this.getClass().getResource("resource/myFile.rdf");
    Zoran

  • Application starts IE and needs to access html inside Jar

    Hi everyone,
    I have a Swing application which i have deployed as an executable Jar file. One of the options i give the users within this application is the ability to view a html file in their default browser. However the html file is packaged within the jar and i cannot get Internet Explorer to target the html file when it exists inside the jar.
    I fire up IE using the following command :
    Runtime.getRuntime().exec( "rundll32 url.dll,FileProtocolHandler <path to html file>" ).
    The above command works no problem if my html file exists on my hard drive so for example the following works no problem:
    Runtime.getRuntime().exec( "rundll32 url.dll,FileProtocolHandler C:\test\help.html" )
    I have tried the following command by getting the URL for the html file using :
    URL theURL = myClass.class.getClassLoader().getSystemResource( "help.html" );
    I then get a path to the file:
    File aFile = new File( theURL.getFile() );
    String htmlFile = aFile.getAbsolutePath();
    and execute the command
    Runtime.getRuntime().exec( "rundll32 url.dll,FileProtocolHandler" + " " + htmlFile )
    However this was not successfull either.Can anyone tell me how i might get internet explorer to display a html file which is packaged within a jar.
    Thanks :)

    An idea. Never tried anything like this myself, so don't know if it will work. Don't see why it shouldn't though.
    A jar file is just a file in the zip format so write some code that uses the tools in java.util.zip to unpack the jar (or just specific contents) to somewhere like /temp
    Then use the runtime exec to start the browser with the argument /temp/file.html
    Hope this helps.

  • How to protect the class files inside jar file.

    Hi Group,
    pls help me.
    my need is i created a executable jar file with certain classes.
    and i'm supposed to send it to my client.
    but if the client needs he can extract the class files from the jar and with the
    help of some decompilers he can convert class file to .java source code and read the whole
    stuff.
    how can i protect my jar file from these.
    is there any security mechanism for that
    pls help me.
    Regards,
    Ranjith.M

    In order to protect my jar file I tried the jar signer technology but it only protects the jar from modification so I need to know how to protect jar file from decoding of the contents inside.

  • Accessing Files in Jar File as part of Web App

    I have put a number of NON-CLASS files in a jar file that resides in WEB-INF/lib in my webapp (running tomcat). These include xml files, xml schemas, images, etc. I would like to give my webapp programmatic access to these non-class files, such as providing the user with a list of all of the xml files in the jar file. I have seen a number of posts on this topic, but no answers.
    I have tried everything that I can think of, to no avail. ServletContext.getResource() with just about any path fails. If I do: ServletContext.getResourcePaths(), I get a list of all of the jar files in WEB-INF/lib (as well as other resources). The jar files are listed as: "jndi:/localhost/WEB-INF/lib/XXXXX.jar". If I use that value in ServletContext.getResource(), it does not work. It appears that I need to set up a JNDI context if I want to get the jar file, using: File f = (File)context.lookup(...). this may or may not work, but I can't figure out how to set up the JNDI context for purposes of tomcat. Right now, this is the only thing that I can think of.
    It would also be great if there was some way to take a path in the jar file, treat it as a directory, and list all of the files in that "directory".

    Thanks. That got me started. You need to put the full path to the file you want. here is the full code, either for getting an individual file or for getting the entire jar file, so that you can enumerate through it and read any file you want (this is for a non-binary file):
    URL url = this.getClass().getResource("/path/path/path/file.xml"); // need full path
    if(url != null)
         JarURLConnection conn = (JarURLConnection)url.openConnection();
         JarFile jarfile = conn.getJarFile();
         JarEntry jarEntry = conn.getJarEntry();
         BufferedReader br = new BufferedReader(new InputStreamReader(jarfile.getInputStream(jarEntry)));
         StringBuffer sb = new StringBuffer();
         String line = null;
         while((line = br.readLine()) != null)
                   sb.append(line);
                   sb.append(System.getProperty("line.separator"));
         br.close();
    String fileContents = sb.toString();

  • How can I use/access files inside an invisible folder?

    I am struggling to get Stylus RMX to show the user libraries option and am discovering that the Lion installer put all the files (8GB) into the Macintosh HD/Users/Library/Application Support/Spectrasonics/SAGE folder, but I cannot see the Macintosh HD/Users/Library Folder to even confirm whether or not the installer added the core library or not.  I tried to make a Library folder in the Users Folder and it said that there was already a folder there named Library that I can't see or access.  It seems like this is fooling Logic also, what can I do here?

    Hi
    In Lion, the <User> Library is hidden by default.
    Easy way to get there in the Finder;
    Use the Go Menu (Hold down Option to sho wthe Library in the Menu)
    HTH
    CCT

  • Accessing files from jar file when running application?

    I have an application that when run should read an xml file (test.xml) from a jar file located in a resource folder. I do this:
        File f = null;
        URL url = this.getClass().getClassLoader().getResource("test.xml");
        try {
          f = new File(url.getPath());
    //      f = new File(url.toURI());
        } catch (Exception e) {
          throw new GeneratorException("Preload input not found!");
        }The file is found in the jar but when I want to use it I get problems:
    when doing:
    f = new File(url.getPath());
    this file is not found and when doing:
    f = new File(url.toURI());
    I get and:
    URI is not hierarchical exception
    Is there now way to convert the xml file in the jar file to a File object?

    fedevaps wrote:
    But is there now otherway to create a File from the URL?Only if the URL refers to a file in the first place. Which it doesn't when the URL refers to an entry in a ZIP file because an entry in a ZIP file is not a file.
    java.io.File refers to physical files in the sense that the operating system uses it. It can't refer to Files on remote machines, it can't refer to "files" stored in .ZIP files and it can't refer to some random String that you construct.
    Usually when you think you need a File object in Java, you don't actually need it. There are only a handful of operations that you can do with a File object that can't be done with a URL as well (deleting, renaming are two that come to my mind). Reading from it and writing to it works with a File as well as with an URL.

  • Accessing Video File within .Jar

    Ok, I am creating a project where I am using JMF to display several pre-created videos. The finished project is going to be placed on a cd and submitted in a contest. Because of this, I am compiling the finished project into an executable .jar file. From my previous experiences, I have found that accessing files inside a jar is much more complex than accessing just any old file. The only way I have found to successfully access files inside a jar is through InputStreams (opposed to URLs). This is where my issues begin.
    I have been searching throughout the internet for the past 2 days trying to find any way to create a Player using a type of InputStream. This doesnt seem to be possible the way it is set up. My obsticle here seems to be getting the Manager to realize the File. Here is what I've tried and the errors I got:
    File -- NoPlayerException -- Expected. When creating a file, it doesnt know to look inside the jar for the file, but to the location of the jar instead. Perhaps there is a way to tell URL to look for the file inside the jar. If so, please tell me how.
    File movie = new File("video1.mpeg");
    JOptionPane.showMessageDialog(null, "File: " + movie + "\n URL: " + movie.toURL() + "\n URI: " + movie.toURI() + "\n URL Parsed URI: " + movie.toURI().toURL(), "Error", JOptionPane.ERROR_MESSAGE); //JOptionPane used to display background information while program is running after compiled in .jar
    MediaPanel mediaPanel = new MediaPanel(movie.getURL());
    InputStream -- Compiling Error -- So my primary method of getting Files inside jars are out the window since there is no way to get the URL of InputStreams.
    InputStream movie = getClass().getResourceAsStream("video1.mpeg");
    MediaPanel mediaPanel = new MediaPanel(movie);
    Creating MediaLocator to file location -- java.net.MalformedURLException: no protocol: video1.mpeg -- I assume that basically means I'm screwed.
    MediaLocator movie = new MediaLocator("video1.mpeg");
    JOptionPane.showMessageDialog(null, "File: " + movie + "\n URL: " + movie.getURL(), "Error", JOptionPane.ERROR_MESSAGE);
    MediaPanel mediaPanel = new MediaPanel(movie.getURL());
    Using URL to get into .jar -- NoPlayerException -- No clue about this one. Just tried this a minute ago.
    URL movie = HannibalProject.class.getResource("video1.mpeg");
    JOptionPane.showMessageDialog(null, "URL: " + movie, "Error", JOptionPane.ERROR_MESSAGE); // Displays "URL: jar:file:/G:/Latin/HannibalProject.jar!/video1.mpeg" I do not know if this is correct or not, perhaps someone could tell me.
    MediaPanel mediaPanel = new MediaPanel(movie);If anyone can help me with this, I will be GREATLY appreciative. If anyone needs more information, additional code snippets, ect. please ask and I'll provide what is needed to help me.
    Edited by: Aussiemcgr on Jan 10, 2010 7:03 PM

    And there arises the pain-in-the-ass that is not yet clear to me. For this particular thing, it needs to be an application, not an applet. Which means I have to make it an executable (alternative might be a .bat, havent played with those for anything other than scripts) instead of something embedded. For whatever reasons, this is the efficiency of the school system or whatever the hell it is.
    The simple fact in all of this is that I have no information about the computer this is going to be ran on. Effectively, I am doing this all in the dark right now because I have been given NO guarantee that the computer(s) I attempt to run this on will even have the Java Virtual Environment on it. And, unfortunately, I have no way of finding any of this out because the Computer Program category of these things are not yet been taken seriously so preparation for judging is a last-minute thing.
    Basically, I am wanting to do this with the least amount of possibilities for Murphy's Law (which means I probably shouldnt be using JMF to begin with, but I hate that incomplete feeling) to happen. For the dark abyss I am traveling into, I'm wanting to leave as little external dependencies as possible. For applets, I have to assume that the computer has some sort of browser (sounds stupid, but it is the school system). Not to mention I've designed it from the ground up to work as an application, instead of an applet (roughly 20 hours of work so far, including text research and coding).
    The contest is Jan 30 so the date is approaching real quick. Quite honestly, the more I am looking at it, the more I am starting to consider getting rid of the videos altogether since I am pretty much done with the project with the exception of that. I would have 9 videos total (made only 1 to make sure it would work before making the other 8). The videos itself would only add an additional flair at best, and pretty much guarantee the 1st place for me. My teacher thinks my program's current capabilities, with just a mouse hover and mouse clicking interface with some animated gifs that allows access to several neatly displayed texts, would probably win me first place. However I feel I would go crazy if I actually had legitimate competition for once and lost because I didnt include this damn multimedia. Not to mention I want to include this on my portfolio in the somewhat distant future (along with my Poker Program I finished last month)...I dont know where I'm going with this...

Maybe you are looking for

  • How to do message mapping in IDoc or RFC to file transfer ?

    Hello guys. I have a doubt. I know how to do an IDoc to file or RFC to file scenario. But how to do mapping in an Idoc to file or RFC to file scenario ? As I understand mapping is done in the sender. But IDoc or RFhas no interface as its used for SAP

  • Synaptics unreliable trackpoint middle click bug

    I found a software bug for synaptics driver.  I am using the latest: 18.0.7.40, 5/26/2014, windows 8.1. The bug is related to unreliable middle clicking (not to be confused with TpScroll ), when the user middle clicks on the trackpoint, the OS doesn'

  • Error code 101000

    How to solve the error in printer hp laserjet 176n error is memory error 101000

  • Change database instance name from XE to something else

    Does anyone know how to change the database name during the XE installation?

  • Droid DNA software upgrade - are you kidding me?

    I don't know who they hire to design anything - but this MASSIVE upgrade just jacked up my phone and hardly works!  None of my calendars are syncing, they took all my customization and tossed them, the look and feel is B&W and boxy!  This designer sh