Re:Read file in the jar file?

P

pvii007

import java.io.*;
public class A
{
public static void main( String[] args)throws Exception
{
A app = new A();
BufferedReader bf = new BufferedReader(
new InputStreamReader(app.getResourceAsStream("a.txt"))
);
if( bf.ready())System.out.println(br.readLine());
}
}
a.txt
hello world

I compress the compiled A and a.txt in the jar file.

Run it. It's successful.

But
import java.io.*;
public class A
{
public static void main( String[] args)throws Exception
{
A app = new A();
BufferedReader bf = new BufferedReader(
new InputStreamReader(app.getResourceAsStream("/dir/a.txt"))// here I
modify it
);
if( bf.ready())System.out.println(br.readLine());
}
}
dir/a.txt
hello world

I still create the jar file.
Run it. It's failure

Why?

Is reading some file in the jar file approprate for the situation that the
file and the class is under the same package ?

If I want to use the class to read the file which is not under same package,
how to implement it?
 
A

Alex

My 2 cents.
1) / is root of jar file. So, if it's in dir "dir" in jar it will be
OK.
2) I dont't know why but you can't read files as resources from root
directly.
They must be in some directory.

So, create jar with at least one directory "dir", place file here and
read it as
/dir/a.txt

It works.
 
P

pvii007

import java.io.*;
public class A
{
public static void main( String[] args)throws Exception
{
A app = new A();
BufferedReader bf = new BufferedReader(
new InputStreamReader(app.getClass().getResourceAsStream("txt/b.txt"))
);
if( bf.ready())System.out.println(bf.readLine());
}
}

Sorry It's still failure

E:\code\java\test\jar\test>java -jar a.jar
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at A.main(A.java:7)
 
R

Roedy Green

E:\code\java\test\jar\test>java -jar a.jar
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at A.main(A.java:7)

lets see a directory of your jar to make sure you have everything
named correctly.
 
A

Alex

You didn't include / !!!
It means that directory txt msut be where you class is.
For example if it is class abc.xyz.Test
then directory and file should be (in the jar) /abc/xyz/txt/b.txt

So I suggest always use root and have it like
/config/b.txt
 
P

pvii007

That's OK.
Thank you for your help.

Another problem.

If I have a file structure
/core/ (here is application)
/core/doc ( here is the doc )
/core/doc/filecollection1/
/core/doc/filecollection1/subcollection1/
/core/doc/filecollection1/subcollection2/
/core/doc/filecollection2/
/core/doc/filecollection2/subcollection1/
/core/doc/filecollection2/subcollection2/

I compress the file and doc in the jar file.I want to access to every dir or
file recursively.

How to write my code?

PS:
I have written the code
....

File codebase = new File("/core/doc");
....
public String read_file_recursive( File file)
{
String ret;
if( codebase.isDirectory())
{
File[] filelist = codebase.listFiles();
for( int i = 0 ; i < filelist;i++ )
{
ret += read_file_recursive(filelist);
}
}
else
{
// read file content ...
}
return ret;
}
....
But it doesn't work under the jar file.



pvii007 said:
import java.io.*;
public class A
{
public static void main( String[] args)throws Exception
{
A app = new A();
BufferedReader bf = new BufferedReader(
new InputStreamReader(app.getClass().getResourceAsStream("txt/b.txt"))
);
if( bf.ready())System.out.println(bf.readLine());
}
}

Sorry It's still failure

E:\code\java\test\jar\test>java -jar a.jar
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at A.main(A.java:7)

Alex said:
My 2 cents.
1) / is root of jar file. So, if it's in dir "dir" in jar it will be
OK.
2) I dont't know why but you can't read files as resources from root
directly.
They must be in some directory.

So, create jar with at least one directory "dir", place file here and
read it as
/dir/a.txt

It works.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top