使用Java中的Scanner类读取.txt文件

use*_*577 47 java file-io java.util.scanner

我正在研究一个Java程序,它逐行读取一个文本文件,每个都有一个数字,每个数字都将它抛入一个数组,然后尝试使用插入排序对数组进行排序.我需要帮助让程序读取文本文件.

我收到以下错误消息:

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)
Run Code Online (Sandbox Code Playgroud)

我在我的"src""bin"和主项目文件夹中有.txt文件的副本,但它仍然无法找到该文件.我顺便使用Eclipse.

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();
    }
 }
}
Run Code Online (Sandbox Code Playgroud)

Sur*_*nga 56

你必须把文件扩展名放在这里

File file = new File("10_Random.txt");
Run Code Online (Sandbox Code Playgroud)


Dha*_*han 23

使用以下代码读取文件

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

public class ReadFile {

    public static void main(String[] args) {

        try {
            System.out.print("Enter the file name with extension : ");

            Scanner input = new Scanner(System.in);

            File file = new File(input.nextLine());

            input = new Scanner(file);


            while (input.hasNextLine()) {
                String line = input.nextLine();
                System.out.println(line);
            }
            input.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

- >此应用程序逐行打印文件内容

  • 为什么要创建一个扫描仪并将其设置为从 System.in 读取,然后又将其更改为从文件读取? (4认同)
  • 他正在从控制台读取一行以获取用户想要读取的文件的名称。他只是为两个扫描器重复使用相同的别名来简化代码。 (2认同)

mvm*_*vmn 7

  1. 确保文件名正确(正确的大写,匹配扩展等 - 如已建议的那样).

  2. 使用该Class.getResource方法在类路径中定位文件 - 不要依赖当前目录:

    URL url = insertionSort.class.getResource("10_Random");
    
    File file = new File(url.toURI());
    
    Run Code Online (Sandbox Code Playgroud)
  3. 通过命令行参数指定绝对文件路径:

    File file = new File(args[0]);
    
    Run Code Online (Sandbox Code Playgroud)

在Eclipse中:

  1. 选择"运行配置"
  2. 转到"参数"选项卡
  3. 将"c:/my/file/is/here/10_Random.txt.or.whatever"放入"程序参数"部分


pan*_*kaj 7

这里有一些工作和测试方法;

using Scanner

package io;

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

public class ReadFromFileUsingScanner {
    public static void main(String[] args) throws Exception {
        File file=new File("C:\\Users\\pankaj\\Desktop\\test.java");
        Scanner sc=new Scanner(file);
        while(sc.hasNextLine()){
            System.out.println(sc.nextLine());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


这是使用Scanner类读取整个文件(无循环)的另一种方法

package io;

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

public class ReadingEntireFileWithoutLoop {
    public static void main(String[] args) throws FileNotFoundException {
        File file=new File("C:\\Users\\pankaj\\Desktop\\test.java");
        Scanner sc=new Scanner(file);
        sc.useDelimiter("\\Z");
        System.out.println(sc.next());
    }
}
Run Code Online (Sandbox Code Playgroud)

运用 BufferedReader

 package io;
import java.io.*;
public class ReadFromFile2 {
    public static void main(String[] args)throws Exception {
        File file=new File("C:\\Users\\pankaj\\Desktop\\test.java");
        BufferedReader br=new BufferedReader(new FileReader(file));
        String st;
        while((st=br.readLine())!=null){
            System.out.println(st);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

using FileReader

package io;
import java.io.*;
public class ReadingFromFile {
    public static void main(String[] args) throws Exception {
        FileReader fr=new FileReader("C:\\Users\\pankaj\\Desktop\\test.java");
        int i;
        while((i=fr.read())!=-1){
            System.out.print((char) i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)