我正在开发一个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();
}
}
}
答案 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)
确保文件名正确(正确大小写,匹配扩展名等 - 已经建议)。
使用Class.getResource
方法在类路径中查找文件 - 不要依赖当前目录:
URL url = insertionSort.class.getResource("10_Random");
File file = new File(url.toURI());
通过命令行参数指定绝对文件路径:
File file = new File(args[0]);
在Eclipse中:
答案 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)
10_Random.txt
。int
之前检查int
。使用hasNextLine()
查看,然后期望int
与nextInt()
一起使用是不安全的。您应该使用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
环境变量中定义的任何地址。当你检查这个,然后尝试下面。
您必须在File对象构造函数中使用文件名的扩展名作为示例:
File myFile = new File("test.txt");
但是有一种更好的方法可以通过传递文件名绝对地址在Scanner对象中使用它,例如:
Scanner sc = new Scanner(Paths.get("test.txt"));
这样你也必须导入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");