Reading a .txt file using Scanner class in Java

2019-01-03 02:10发布

I am working on a Java program that reads a text file line-by-line, each with a number, takes each number throws it into an array, then tries and use insertion sort to sort the array. I need help with getting the program to read the text file.

I am getting the following error messages:

java.io.FileNotFoundException: 10_Random (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.util.Scanner.<init>(Unknown Source)
at insertionSort.main(insertionSort.java:14)

I have a copy of the .txt file in my "src" "bin" and main project folder but it still cannot find the file. I am using Eclipse by the way.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class insertionSort {

public static void main(String[] args) {

    File file = new File("10_Random");

    try {

        Scanner sc = new Scanner(file);

        while (sc.hasNextLine()) {
            int i = sc.nextInt();
            System.out.println(i);
        }
        sc.close();
    } 
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
 }
}

11条回答
闹够了就滚
2楼-- · 2019-01-03 02:50

File Path Seems to be an issue here please make sure that file exists in the correct directory or give the absolute path to make sure that you are pointing to a correct file. Please log the file.getAbsolutePath() to verify that file is correct.

查看更多
可以哭但决不认输i
3楼-- · 2019-01-03 02:53
  1. Make sure the filename is correct (proper capitalisation, matching extension etc - as already suggested).

  2. Use the Class.getResource method to locate your file in the classpath - don't rely on the current directory:

    URL url = insertionSort.class.getResource("10_Random");
    
    File file = new File(url.toURI());
    
  3. Specify the absolute file path via command-line arguments:

    File file = new File(args[0]);
    

In Eclipse:

  1. Choose "Run configurations"
  2. Go to the "Arguments" tab
  3. Put your "c:/my/file/is/here/10_Random.txt.or.whatever" into the "Program arguments" section
查看更多
疯言疯语
4楼-- · 2019-01-03 02:57

private void loadData() {

    Scanner scanner = null;
    try {
        scanner = new Scanner(new File(getFileName()));
        while (scanner.hasNextLine()) {
            Scanner lijnScanner = new Scanner(scanner.nextLine());

            lijnScanner.useDelimiter(";");
            String stadVan = lijnScanner.next();
            String stadNaar = lijnScanner.next();
            double km = Double.parseDouble(lijnScanner.next());

            this.voegToe(new TweeSteden(stadVan, stadNaar), km);

        }
    } catch (FileNotFoundException e) {
        throw new DbException(e.getMessage(), e);
    } finally {
        if(scanner != null){
            scanner.close();
        }
    }
}
查看更多
劳资没心,怎么记你
5楼-- · 2019-01-03 02:59

The file you read in must have exactly the file name you specify: "10_random" not "10_random.txt" not "10_random.blah", it must exactly match what you are asking for. You can change either one to match so that they line up, but just be sure they do. It may help to show the file extensions in whatever OS you're using.

Also, for file location, it must be located in the working directory (same level) as the final executable (the .class file) that is the result of compilation.

查看更多
Ridiculous、
6楼-- · 2019-01-03 03:02
  1. You need the specify the exact filename, including the file extension, e.g. 10_Random.txt.
  2. The file needs to be in the same directory as the executable if you want to refer to it without any kind of explicit path.
  3. While we're at it, you need to check for an int before reading an int. It is not safe to check with hasNextLine() and then expect an int with nextInt(). You should use hasNextInt() to check that there actually is an int to grab. How strictly you choose to enforce the one integer per line rule is up to you, of course.
查看更多
冷血范
7楼-- · 2019-01-03 03:03

No one seems to have addressed the fact that your not entering anything into an array at all. You are setting each int that is read to "i" and then outputting it.

for (int i =0 ; sc.HasNextLine();i++)
{
    array[i] = sc.NextInt();
}

Something to this effect will keep setting values of the array to the next integer read.

Than another for loop can display the numbers in the array.

for (int x=0;x< array.length ; x++)
{
    System.out.println("array[x]");
}
查看更多
登录 后发表回答