Take the 2-minute tour ×

Hello I have this in my code

File file = new File("words.txt");
    Scanner scanFile = new Scanner(new FileReader(file));
    ArrayList<String> words = new ArrayList<String>();

    String theWord;    
    while (scanFile.hasNext()){
        theWord = scanFile.next();

But for some reason I am getting a


I have the words.txt file in the same folder as all of my .java files

What am I doing wrong? Thanks!

share|improve this question
How do you execute the program? From the command-line or from an IDE. Most IDEs have an option to specify the working directory of an application. You would have to put your file there. –  Björn Pollex Jun 7 '11 at 13:50
Is the file already opened elsewhere (including elsewhere in your code without being closed)? The Javadoc for java.io.FileReader.FileReader( java.io.File ) states that a FileNotFoundException is thrown "if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading." If you're sure the file exists and that it's a regular file, then there must be some reason it can't be opened. Make sure the file's permissions allow for reading as well. –  Mike M Jun 7 '11 at 13:55
add comment

5 Answers

up vote 6 down vote accepted

Tip: add this line to your code...


Then compare that path with where your file actually is. The problem should be immediately obvious.

share|improve this answer
add comment

The file should reside in the directory from which you execute the application, i.e. the working directory.

share|improve this answer
add comment

Generally it's a good idea to package data files with your code, but then using java.io.File to read them is a problem, as it's hard to find them. The solution is to use the getResource() methods in java.lang.ClassLoader to open a stream to a file. That way the ClassLoader looks for your files in the location where your code is stored, wherever that may be.

share|improve this answer
add comment

You haven't specified an absolute path. The path would therefore be treated as a path, relative to the current working directory of the process. Usually this is the directory from where you've launched the Main-Class.

If you're unsure about the location of the working directory, you can print it out using the following snippet:


Fixing the problem will require adding the necessary directories in the original path, to locate the file.

share|improve this answer
add comment


URL url = this.getClass().getResource( "words.txt" );
File file = new File(url.getPath());
share|improve this answer
Or simply InputStream stream = this.getClass().getResourceAsStream( "words.txt" ); –  Ernest Friedman-Hill Jun 7 '11 at 13:54
add comment

Your Answer


