Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #18304

Re: How to include a text file in my executable JAR file?

Path csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!npeer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
From Lew <lewbloch@gmail.com>
Newsgroups comp.lang.java.programmer
Subject Re: How to include a text file in my executable JAR file?
Date Thu, 23 Aug 2012 13:43:18 -0700 (PDT)
Organization http://groups.google.com
Lines 90
Message-ID <55e2cfd7-dee0-43f8-a219-9bf5c7383189@googlegroups.com> (permalink)
References <30f3250b-9cea-402f-929a-3191d05a81f2@googlegroups.com>
NNTP-Posting-Host 69.28.149.29
Mime-Version 1.0
Content-Type text/plain; charset=ISO-8859-1
X-Trace posting.google.com 1345754697 3006 127.0.0.1 (23 Aug 2012 20:44:57 GMT)
X-Complaints-To groups-abuse@google.com
NNTP-Posting-Date Thu, 23 Aug 2012 20:44:57 +0000 (UTC)
In-Reply-To <30f3250b-9cea-402f-929a-3191d05a81f2@googlegroups.com>
Complaints-To groups-abuse@google.com
Injection-Info glegroupsg2000goo.googlegroups.com; posting-host=69.28.149.29; posting-account=CP-lKQoAAAAGtB5diOuGlDQk0jIwmH0T
User-Agent G2/1.0
X-Received-Bytes 4347
Xref csiph.com comp.lang.java.programmer:18304

Show key headers only | View raw


zyng wrote:
> My Java program needs to access a text file(in fact, the Java code will use Linux System command "cp" to copy this text file to a destination folder during running). Suppose this is my Java program HelloWorld.java:
> 
> package aa.bb.cc;
> 
> public class HelloWorld
> {
>     ...
>     public static void main(final String[] args)
>     {
>         final URL myUrl = this.getClass().getClassLoader().getResource("namelist.txt");

<http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)>

You don't actually need to get the 'ClassLoader' explicitly, as the 'Class' method 
will work, too.

<http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)>

Both these search the classpath.

Entries in ZIP files (like JARs) are distinguished by <JARname>!path

>         final File nameFile = new File(myUrl.getPath());
>         if(windowlayoutFile.exists() == false)

'== false', really?

What's wrong with 'if (!windowlayoutFile.exists())'?

>         {
>             System.out.println(nameFile.getAbsolutePath() + " does not exist!!!");
>         }
>         else
>         {
>             System.out.println(nameFile.getAbsolutePath() + " exists");
>         }
>     }
> }
> 
> 
> This is the directory and file structure in my file system:
> /HOME/java_project/src/aa/bb/cc/HelloWorld.java
> /HOME/java_project/build/aa/bb/cc/HelloWorld.class
> /HOME/java_project/nonsrc/namelist.txt
> 
> In Eclipse, I have added nonsrc as "external class folder" and the code above works! The output is:
> /HOME/java_project/nonsrc/windowlayout.xml exists
> I am still not clear why use "external class folder", but it works in Eclipse.

You added the folder to your classpath. You'd do the same thing with the 
"-classpath" ("-cp") option from the tools' command line.

> Now, my problem is when creating an executable JAR file(helloworld.jar), my JAR content is(shown by the command "jar tf helloworld.jar"):
> 
> aa/bb/cc/HelloWorld.class
> 
> namelist.txt

So 'namelist.txt' is at the root of the JAR classpath node.

'HelloWorld' is 'aa.bb.cc.HelloWorld'.
'namelist.txt' is in the default (unnamed) package.

> Now, if i am at /HOME/test directory and the JAR file is here too:
> 
> java -jar helloworld.jar
> 
> This is the confusing output:
> 
> /HOME/test/file:/HOME/test/robot.jar!/namelist.txt does not exist!!!

"robot.jar"?

You're running from the JAR. Local directories have no relevance, except 
as you access them via 'File' constructs.

> The answers by Google just do not give me a clear whole picture of what is going on. (I don't want to put namelist.txt at the same package location as HelloWorld.java. I guess, if I do that, I maybe able to make it work by myself)

It's in the default package, findable via 'getResource("/namelist.txt")'.

> I am surprised by an exclamation shown in the file path too. I have never used the class URL in the past, which is used in my code now.

The bang character is part of the ZIP file reference syntax.

But when you run "java -jar" you have to specify all extrinsic classpath 
stuff in the JAR manifest. Otherwise only elements within the JAR are accessible.

-- 
Lew

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

How to include a text file in my executable JAR file? zyng <xsli2@yahoo.com> - 2012-08-23 08:01 -0700
  Re: How to include a text file in my executable JAR file? zyng <xsli2@yahoo.com> - 2012-08-23 08:04 -0700
  Re: How to include a text file in my executable JAR file? Jan Burse <janburse@fastmail.fm> - 2012-08-23 17:23 +0200
    Re: How to include a text file in my executable JAR file? Jeff Higgins <jeff@invalid.invalid> - 2012-08-23 11:51 -0400
      Re: How to include a text file in my executable JAR file? Jeff Higgins <jeff@invalid.invalid> - 2012-08-23 11:53 -0400
  Re: How to include a text file in my executable JAR file? Lew <lewbloch@gmail.com> - 2012-08-23 13:43 -0700
  Re: How to include a text file in my executable JAR file? Roedy Green <see_website@mindprod.com.invalid> - 2012-08-23 14:00 -0700

csiph-web