2017-02-01 7 views
0

Я очень новичок в программировании, и у меня много проблем с попыткой чтения данных из текстового файла.Простая программа java не будет читать файл

  1. Моя первая проблема возникла при попытке создать новый объект Scanner для моего файла. Я получил ошибку «файл не найден», если я не добавил .getAbsolutePath() после объекта файла.

  2. Теперь я не могу читать какие-либо данные из файла. Когда я пытаюсь напечатать каждую строку в файле, я не получаю никакого вывода.

Я предполагаю, что у меня просто отсутствует что-то очень очевидное. Может кто-нибудь мне помочь?

public static void main(String[] args) { 
    File inputFile = new File("menu.txt"); 
    System.out.println("Reading from file" + inputFile); 
    Scanner inputScanner = new Scanner(inputFile.getAbsolutePath()); 
    String answer; 

    while (inputScanner.hasNextLine()){ 
     answer = inputScanner.nextLine(); 
     System.out.println(answer); 

    } 
} 

EDIT: Я был первоначально передавая объект файла в моем создания объекта сканера, но по-прежнему получаю сообщение об ошибке.

+6

'File.getAbsolutePath' RETU rns a 'String'. И 'Scanner (String)' does ** не ** читается из 'File' (он читает только это' String'). –

+0

Это файл menu.txt в моем каталоге проектов. Я даже перечислял все файлы в моей директории проекта, и путь был распечатан в порядке. Я также попытался использовать полный путь, а не просто menu.txt –

+0

@ElliottFrisch: нашел более актуальную проблему –

ответ

0

Ваша проблема заключается в том, что вы пытаетесь использовать Scanner для чтения из файла, тогда как Scanner используется для чтения токенов (например, строк) из заданной строки. Вместо этого, вы должны использовать Reader для чтения файла:

File inputFile = new File("menu.txt"); 
System.out.println("Reading from file" + inputFile); 
BufferedReader inputReader = new BufferedReader(new FileReader(inputFile.getAbsolutePath())); 
String answer; 

while ((answer = inputReader.readLine()) != null) { 
    System.out.println(answer); 
} 

UPDATE: Вы можете использовать сканер, если вы действительно хотите - но тогда вам нужно передать Path объект в конструктор:

File inputFile = new File("menu.txt"); 
System.out.println("Reading from file" + inputFile); 
Scanner inputScanner = new Scanner(inputFile); 
String answer; 

while (inputScanner.hasNextLine()){ 
    answer = inputScanner.nextLine(); 
    System.out.println(answer); 

} 

(Обратите внимание, что я не проверял этот код.)

+0

Это меня смущает, так как сканер может читать из файла просто отлично. –

+0

@HovercraftFullOfEels Сканер может читать из файла - правильно - но тогда файл должен быть указан как путь, а не строка. Я обновлю ответ. –

+1

@AleksG Существует подходящий конструктор 'Scanner', который принимает аргумент' File'. Не должно быть необходимости сначала преобразовать его в «Путь». – davmac

-1
public class Test { 
//The file should be in contained within the root of your project. 
// When you execute a project in eclipse, the working directory is the most top level of your project. 
// Right click your project, click New>File, and make a txt file called "TheGame.txt". 
private static final String FILENAME = "menu.txt"; 

public static void main(String[] args) { 

    try (BufferedReader inputFile = new BufferedReader(new FileReader(FILENAME))) { 
     System.out.println("Reading from file" + inputFile); 

     String answer; 

     while ((answer = inputFile.readLine()) != null) { 
      System.out.println(answer); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 
}