Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FileNotFoundException when creating a Scanner in Eclipse with Java

I'm getting a FileNotFoundException when running the following Java 6 code on Eclipse (Indigo) on Snow Leopard:

import java.io.*;
import java.util.*;

public class readFile {

    public static void main(String[] args) {

        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9

    }
}

The exception is

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unhandled exception type FileNotFoundException

    at readFile.main(readFile.java:9)

My current workspace is /Users/daniel/pr/java. It contains only one project (readFile), and the file hierarchy looks like this:

- readFile
    - src
        - (default package)
            - readFile.java
    - JRE System Library [JavaSE-1.6]
    - myfile.txt

After reading several very similar questions, I've tried

  • placing copies of myfile.txt in the project, bin, src, and workspace directories, as well as my home and root folders
  • identifying the working directory and using a relative path
  • manually setting the workspace via "Run Configurations > Arguments > Working Directory" in Eclipse
  • running the program with the command line Java launcher in the bin, readFile, src, and java directories (with copies of myfile.txt in all of these places)
  • removing the file extension and/or lengthening the filename (above some supposed minimum character limit), and
  • verifying the permissions of myfile.txt (they're now rw-r--r--).

I'm at a loss. What could be the problem? (Thank you for reading!)

like image 933
Daniel Jordan Avatar asked Dec 20 '22 22:12

Daniel Jordan


1 Answers

The exception tells you the problem.

The code you have in your main might throw a FileNotFoundException, so you need to consider that in your code, either by declaring in the method signature that that exception can be thrown, or by surrounding the code with a try catch:

Declaring:

public static void main(String[] args) throws FileNotFoundException{

    Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9

}

Or using try/catch

public static void main(String[] args) {
    try { 
        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9
    } catch (FileNotFoundException e) {
        //do something with e, or handle this case
    }
}

The difference between these two approaches is that, since this is your main, if you declare it in the method signature, your program will throw the Exception and stop, giving you the stack trace.

If you use try/catch, you can handle this situation, either by logging the error, trying again, etc.

You might want to give a look at: http://docs.oracle.com/javase/tutorial/essential/exceptions/ to learn about exception handling in Java, it'll be quite useful.

like image 146
pcalcao Avatar answered Apr 07 '23 15:04

pcalcao