Search code examples
javafilejava.util.scannerfilenotfoundexceptionfileinputstream

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();
}

Solution

  • 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.