allstar
allstar

Reputation: 1205

Java can't read file except when in project root directory

I am using IDEA 14 to follow a simple Java tutorial (JDBC). As part of this, I am storing some configuration properties in a file called jdbcTutorial.properties. When I put this in the root directory of the project, I can read it with the following:

Properties props = new Properties();
props.load(new FileInputStream("jdbcTutorial.properties"));

However, as soon as I move it to any other directory in the project, I get the error "No such file or directory". This happens regardless of whether I specify a relative or absolute path:

enter image description here

Maybe there are more standard ways to use config files, but I would really like to understand the behavior I am observing. Thanks for helping!

Upvotes: 0

Views: 1492

Answers (3)

Klitos Kyriacou
Klitos Kyriacou

Reputation: 11621

When you build a project, IDEA takes the files in the resources directory and puts them in the executable jar. So to get an input stream from that file, you need to get it directly from inside the jar. Instead of FileInputStream, use

getClass().getResourceAsStream("jdbcTutorial.properties")

Upvotes: 1

Keksi
Keksi

Reputation: 88

When no path is supplied for a file, java assumes that this file is in the project's root folder. So the relative path "." always points to this folder. When the file is somewhere else, put the appropriate relative path before the path name, like "./files/configuration/jdbcTutorial.properties".

It work also when you put an absolute file path before the path name, like "C:/Users/Me/Documents/Java/workspace/thisProject/files/configuration/jdbcTutorial.properties".

Upvotes: 0

Abhinab Kanrar
Abhinab Kanrar

Reputation: 1552

By default root directory would be added to your project's build path. Since the directory in which you are putting the file is not added in your project's build path jvm is unable to find the file. You have two options:

  1. Add the folder where you are putting your prop to build path.
  2. Access the file with full path i.e. /home/user/workspace/....

Upvotes: 1

Related Questions