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

时间:2012-11-01 21:27:01

标签: 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)

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

12 个答案:

答案 0 :(得分:53)

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

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

答案 1 :(得分:22)

使用以下代码读取文件

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

}

- &GT;此应用程序逐行打印文件内容

答案 2 :(得分: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());
        }
    }
}


这是使用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());
    }
}

使用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);
        }
    }
}

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

答案 3 :(得分:6)

  1. 确保文件名正确(正确大小写,匹配扩展名等 - 已经建议)。

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

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

    File file = new File(args[0]);
    
  4. 在Eclipse中:

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

答案 4 :(得分:2)

似乎没有人解决过你根本没有输入任何东西的事实。您正在设置读取到&#34; i&#34;的每个int。然后输出它。

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

此效果会使数组的值设置为下一个整数读数。

比另一个for循环可以显示数组中的数字。

for (int x=0;x< array.length ; x++)
{
    System.out.println("array[x]");
}

答案 5 :(得分:1)

  1. 您需要指定确切的文件名,包括文件扩展名,例如10_Random.txt
  2. 如果要在没有任何显式路径的情况下引用该文件,该文件需要与可执行文件位于同一目录中。
  3. 在我们处理此问题时,您需要在阅读int之前检查int。使用hasNextLine()查看,然后期望intnextInt()一起使用是不安全的。您应该使用hasNextInt()检查是否确实要抓取int。当然,您选择强制执行每行一个整数规则的严格程度取决于您。

答案 6 :(得分:1)

文件路径似乎是一个问题,请确保该文件存在于正确的目录中,或者给出绝对路径以确保指向正确的文件。 请记录file.getAbsolutePath()以验证该文件是否正确。

答案 7 :(得分:1)

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

答案 8 :(得分:0)

您读入的文件必须具有您指定的文件名:"10_random"不是&#34; 10_random.txt&#34;不是&#34; 10_random.blah&#34;,它必须与你要求的完全匹配。您可以更改任何一个以匹配,以便它们排成一行,但只是确保它们可以。在您正在使用的任何操作系统中显示文件扩展名可能会有所帮助。

此外,对于文件位置,它必须位于与编译结果的最终可执行文件(.class文件)相同的工作目录(同一级别)中。

答案 9 :(得分:0)

首先检查文件地址,它必须位于.java文件旁边或您在classpath环境变量中定义的任何地址。当你检查这个,然后尝试下面。

  1. 您必须在File对象构造函数中使用文件名的扩展名作为示例:

    File myFile = new File("test.txt");

  2. 但是有一种更好的方法可以通过传递文件名绝对地址在Scanner对象中使用它,例如:

    Scanner sc = new Scanner(Paths.get("test.txt"));

  3. 这样你也必须导入java.nio.file.Paths

答案 10 :(得分:0)

你应该使用

File file = new File("bin/10_Random.txt");

File file = new File("src/10_Random.txt");

相对于Eclipse中的项目文件夹。

答案 11 :(得分:0)

通过值得设置字符编码的方式:

Scanner scanner = new Scanner(new File("C:\\tmp\\edit1.txt"), "UTF-16");