Ky -
Ky -

Reputation: 32103

Java won't recognize file in JAR

I have a .csv database file inside my java program's JAR file. The program works fine in NetBeans IDE before I package it, but once I do, it refuses to believe the file is in it, even though I had it print out the path where it was looking and unzipped the JAR to be sure I told it to look in the right place. How do I make Java see this?

  try
  {
    String path = Main.class.getResource("/items.csv").getPath();
    db = new java.io.File(path);
    loadValues(db);
  }
  catch (java.io.FileNotFoundException ex1)
  {
    System.out.println("Could not find database file (" + ui.db + ").");
  }

Upvotes: 0

Views: 1210

Answers (3)

Abhinav Sarkar
Abhinav Sarkar

Reputation: 23802

Use Class.getResourceAsStream to load the files inside the jar:

    InputStream is = Main.class.getResourceAsStream("/items.csv");
    loadValues(is);

Change your loadValues method to work on an InputStream rather than a File.

Upvotes: 1

Jigar Joshi
Jigar Joshi

Reputation: 240898

Once you pack it in jar file it is no longer a direct file..

Try to read it with InputStream

InputStream input = getClass().getRessourceAsStream("/classpath/to/my/items.csv");

Also See

Upvotes: 2

Joachim Sauer
Joachim Sauer

Reputation: 308041

Don't create a File object for the resource, as there may be no File. A File represents only "real" files on the filesystem. As far as the OS is concerned a "file" inside a .jar file is just some bytes.

You'll need to use getResourceAsStream() to get an InputStream and read from that.

Upvotes: 5

Related Questions