Чтение файла.txt с использованием класса Scanner в 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)
У меня есть копия файла.txt в моем "src" "bin" и основной папке проекта, но он все еще не может найти файл. Кстати, я использую 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();
}
}
}
11 ответов
Вы должны поставить расширение файла здесь
File file = new File("10_Random.txt");
Используйте следующие коды, чтобы прочитать файл
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();
}
}
}
-> Это приложение печатает содержимое файла построчно
Вот некоторые рабочие и проверенные методы;
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);
}
}
}
Убедитесь, что имя файла правильное (правильная прописная буква, соответствующее расширение и т. Д. - как уже предлагалось).
Использовать
Class.getResource
способ найти ваш файл в classpath - не полагайтесь на текущий каталог:URL url = insertionSort.class.getResource("10_Random"); File file = new File(url.toURI());
Укажите абсолютный путь к файлу через аргументы командной строки:
File file = new File(args[0]);
В Затмении:
- Выберите "Запустить настройки"
- Перейти на вкладку "Аргументы"
- Поместите свой "c:/my/file/is/here/10_Random.txt.or.whothing" в раздел "Аргументы программы"
Кажется, никто не учел тот факт, что вы вообще ничего не вводите в массив. Вы устанавливаете каждый 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]");
}
- Вам необходимо указать точное имя файла, включая расширение файла, например,
10_Random.txt
, - Файл должен находиться в том же каталоге, что и исполняемый файл, если вы хотите сослаться на него без какого-либо явного пути.
- Пока мы на этом, вам нужно проверить
int
перед прочтениемint
, Это не безопасно, чтобы проверить сhasNextLine()
а затем ожидатьint
сnextInt()
, Вы должны использоватьhasNextInt()
чтобы проверить, что на самом деле естьint
Хватать. Разумеется, насколько строго вы решите применять одно целое число в линейном правиле.
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();
}
}
}
Путь к файлу Кажется, что проблема здесь, пожалуйста, убедитесь, что файл существует в правильном каталоге или укажите абсолютный путь, чтобы убедиться, что вы указываете на правильный файл. Пожалуйста, зарегистрируйте file.getAbsolutePath(), чтобы убедиться, что файл правильный.
Вы должны использовать либо
File file = new File("bin/10_Random.txt");
Или же
File file = new File("src/10_Random.txt");
Относительно папки проекта в Eclipse.
Файл, который вы читаете, должен иметь именно то имя файла, которое вы укажете: "10_random"
не "10_random.txt", не "10_random.blah", он должен точно соответствовать тому, что вы просите. Вы можете изменить любой из них так, чтобы они соответствовали друг другу, но просто убедитесь, что они есть. Это может помочь показать расширения файлов в любой операционной системе, которую вы используете.
Кроме того, для определения местоположения файла он должен находиться в рабочем каталоге (того же уровня), что и конечный исполняемый файл (файл.class), являющийся результатом компиляции.
Сначала проверьте адрес файла, он должен быть рядом с вашим .java
файл или в любой адрес, который вы определяете в classpath
переменная окружения. Когда вы проверите это, попробуйте ниже.
Вы должны использовать имя файла по его расширению в конструкторе объекта File, например:
File myFile = new File("test.txt");
но есть лучший способ использовать его внутри объекта Scanner, передав в качестве примера абсолютный адрес имени файла:
Scanner sc = new Scanner(Paths.get("test.txt"));
таким образом, вы должны импортировать java.nio.file.Paths
также.
Кстати, стоит настроить и кодировку символов:
Scanner scanner = new Scanner(new File("C:\\tmp\\edit1.txt"), "UTF-16");