Beginner
Beginner

Reputation: 143

File Not Found w/ FileInputStream

I'm trying check and see if my program is scanning in the contents of a File however get this error:

Exception in thread "main" java.io.FileNotFoundException: input.txt (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at lottery.main(lottery.java:40)

I don't see the problem as in my code as I always do my files this way, can't seem to understand to the problem.

Code:

public static void main(String[] args) throws FileNotFoundException 
{
    Scanner in = new Scanner(System.in);
    System.out.println("Enter the name of the file with the ticket data.");
    String input = in.nextLine();
    File file = new File(input);

    in.close();

    Scanner scan = new Scanner(new FileInputStream(file));
    int lim = scan.nextInt();
    for(int i = 0; i < lim * 2; i++)
    {
        String name = scan.nextLine();
        String num = scan.nextLine();

        System.out.println("Name " + name);
    }

    scan.close();
}

Upvotes: 1

Views: 16666

Answers (3)

SWiggels
SWiggels

Reputation: 2296

A FileInputStream obtains input bytes from a file in a file system. What files are available depends on the host environment. From docs.oracle.com

This means your FileInputStream wants an actual file system file provided. But you only made a filehandler when calling new File(). so you need to create the file on the file system calling file.createNewFile();

File file = new File(input); //here you make a filehandler - not a filesystem file.

if(!file.exists()) {
    file.createNewFile(); // create your file on the file system
} 

Scanner scan = new Scanner(new FileInputStream(file)); // read from file system.

Upvotes: 2

Peter Lawrey
Peter Lawrey

Reputation: 533482

The problem is that your program could not find input.txt in the current working directory.

Look in the directory where is your program running and check it has a file called input.txt in it.

Upvotes: 0

Davide Lorenzo MARINO
Davide Lorenzo MARINO

Reputation: 26926

Check if you start the jvm from the directory where the input file is located.

If not there is not possibility to find it with a relative path. Eventually change it to an absolute path (something like /usr/me/input.txt).

If the file is located on the directory where you start the java program check for the rights of the file. It could be not visible for the user launching the java program.

Upvotes: 0

Related Questions