提问人:user12074577 提问时间:11/2/2012 最后编辑:Ripon Al Wasimuser12074577 更新时间:9/13/2019 访问量:764351
在 Java 中使用 Scanner 类读取.txt文件
Reading a .txt file using Scanner class in Java
问:
我正在开发一个 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();
}
}
}
答:
你必须把文件扩展名放在这里
File file = new File("10_Random.txt");
您读取的文件必须与您指定的文件名完全一致:不是“10_random.txt”而不是“10_random.blah”,它必须与您要求的文件名完全匹配。您可以更改任何一个以匹配,以便它们对齐,但要确保它们对齐。在您使用的任何操作系统中显示文件扩展名可能会有所帮助。"10_random"
此外,对于文件位置,它必须与编译结果的最终可执行文件(.class 文件)位于工作目录(同一级别)中。
- 您需要指定确切的文件名,包括文件扩展名,例如 .
10_Random.txt
- 如果要在没有任何显式路径的情况下引用该文件,则该文件需要与可执行文件位于同一目录中。
- 当我们使用它时,您需要在阅读 .检查 with 然后期望 with 是不安全的。你应该用它来检查是否真的有一个可以抓住的。当然,您选择强制执行每行一个整数规则的严格程度取决于您。
int
int
hasNextLine()
int
nextInt()
hasNextInt()
int
确保文件名正确(正确的大写、匹配的扩展名等 - 如前所述)。
使用
Class.getResource
方法在类路径中查找文件 - 不要依赖当前目录:URL url = insertionSort.class.getResource("10_Random"); File file = new File(url.toURI());
通过命令行参数指定绝对文件路径:
File file = new File(args[0]);
在 Eclipse 中:
- 选择“运行配置”
- 转到“参数”选项卡
- 将“c:/my/file/is/here/10_Random.txt.or.whatever”放入“程序参数”部分
评论
try catch
使用以下代码读取文件
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();
}
}
}
->此应用程序正在逐行打印文件内容
评论
似乎没有人解决您根本没有在数组中输入任何内容的事实。您将读取的每个 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]");
}
文件路径:这里似乎是一个问题,请确保该文件存在于正确的目录中,或者提供绝对路径以确保您指向正确的文件。 请记录 file.getAbsolutePath() 以验证文件是否正确。
以下是一些有效且经过测试的方法;
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);
}
}
}
首先检查文件地址,它必须位于文件旁边或您在环境变量中定义的任何地址中。当您检查此内容时,请尝试以下操作。.java
classpath
您必须在 File 对象构造函数中使用文件扩展名的文件名,例如:
File myFile = new File("test.txt");
但是有一种更好的方法可以在 Scanner 对象中使用它,方法是传递文件名绝对地址,例如:
Scanner sc = new Scanner(Paths.get("test.txt"));
这样,您也必须导入。java.nio.file.Paths
私有空 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();
}
}
}
您应该使用其中任何一个
File file = new File("bin/10_Random.txt");
或
File file = new File("src/10_Random.txt");
相对于 Eclipse 中的项目文件夹。
评论