Чтение файла.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);
        }
    }
}
  1. Убедитесь, что имя файла правильное (правильная прописная буква, соответствующее расширение и т. Д. - как уже предлагалось).

  2. Использовать Class.getResource способ найти ваш файл в classpath - не полагайтесь на текущий каталог:

    URL url = insertionSort.class.getResource("10_Random");
    
    File file = new File(url.toURI());
    
  3. Укажите абсолютный путь к файлу через аргументы командной строки:

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

В Затмении:

  1. Выберите "Запустить настройки"
  2. Перейти на вкладку "Аргументы"
  3. Поместите свой "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]");
}
  1. Вам необходимо указать точное имя файла, включая расширение файла, например, 10_Random.txt,
  2. Файл должен находиться в том же каталоге, что и исполняемый файл, если вы хотите сослаться на него без какого-либо явного пути.
  3. Пока мы на этом, вам нужно проверить 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 переменная окружения. Когда вы проверите это, попробуйте ниже.

  1. Вы должны использовать имя файла по его расширению в конструкторе объекта File, например:

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

  2. но есть лучший способ использовать его внутри объекта 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");
Другие вопросы по тегам