58

我正在开发一个 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();
    }
 }
}
4

12 回答 12

67

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

File file = new File("10_Random.txt");
于 2012-11-01T21:29:43.347 回答
27

使用以下代码读取文件

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

}

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

于 2014-09-23T10:36:51.550 回答
11

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

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);
        }
    }
}
于 2017-01-10T18:30:22.397 回答
7
  1. 确保文件名正确(正确的大写、匹配的扩展名等 - 正如已经建议的那样)。

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

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

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

在 Eclipse 中:

  1. 选择“运行配置”
  2. 转到“参数”选项卡
  3. 将您的“c:/my/file/is/here/10_Random.txt.or.whatever”放入“程序参数”部分
于 2012-11-01T21:35:46.027 回答
3

似乎没有人解决您根本没有在数组中输入任何内容的事实。您正在将读取的每个 int 设置为“i”,然后将其输出。

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]");
}
于 2014-10-15T00:21:22.840 回答
2
  1. 您需要指定确切的文件名,包括文件扩展名,例如10_Random.txt.
  2. 如果您想在没有任何显式路径的情况下引用该文件,则该文件需要与可执行文件位于同一目录中。
  3. 在我们进行此操作时,您需要int在阅读int. hasNextLine()检查 with然后期待intwith是不安全的nextInt()。您应该使用hasNextInt()来检查是否确实有一个int可以抓取。当然,您选择执行每行一个整数规则的严格程度取决于您。
于 2012-11-01T21:33:36.777 回答
2

私人无效负载数据(){

    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();
        }
    }
}
于 2017-06-19T12:04:42.137 回答
1

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

于 2015-05-26T05:17:42.447 回答
1

你应该使用

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

或者

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

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

于 2017-10-13T17:46:17.490 回答
0

您读入的文件必须与您指定的文件名完全相同:"10_random"不是“10_random.txt”而不是“10_random.blah”,它必须与您要求的完全匹配。您可以更改其中任何一个以匹配,以使它们对齐,但请确保它们对齐。在您使用的任何操作系统中显示文件扩展名可能会有所帮助。

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

于 2012-11-01T21:31:19.747 回答
0

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

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

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

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

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

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

于 2017-06-05T06:52:03.827 回答
0

顺便说一句,也值得设置字符编码:

Scanner scanner = new Scanner(new File("C:\\tmp\\edit1.txt"), "UTF-16");
于 2019-09-13T12:34:22.000 回答