2016-04-12 3 views
0

Я новичок в java, и когда я следую за дисплеем 2.12 Absolute Java. Консоль показывает, что есть поток в 'main. Я помещаю текстовый файл в корневую директорию моей программы. И у меня также есть двойная проверка кода. Я понятия не имею, как это исправить. Я использую eclipse для кода в macOS, а java - это новейшая версия. Спасибо за вашу помощь Этот код показывает, как это:Java try and catch method

import java.util.Scanner; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 

public class TextFileDemo 
{ 
    public static void main(String[] args) 
    { 
     Scanner fileIn = null; 
     try 
     { 
      fileIn = new Scanner(new FileInputStream("player.rtf")); 
     } 
     catch (FileNotFoundException e) 
     { 
      System.out.println("file not found."); 
      System.exit(0); 
     } 

     int highscore; 
     String name; 

     System.out.println("Text left to read? " + fileIn.hasNextLine()); 
     highscore = fileIn.nextInt(); 
     fileIn.nextLine(); 
     name = fileIn.nextLine(); 

     System.out.println("Name: " + name); 
     System.out.println("High score: " + highscore); 
     System.out.println("Text left to read? " + fileIn.hasNextLine()); 
     fileIn.close(); 
    } 

И это моя консоль дисплея:

And this is my console display

+0

Заменить FileNotFoundException на InputMismatchException. – htpvl

ответ

0

Я нашел проблему в следующей части кода:

highscore = fileIn.nextInt(); 

Когда вы читаете его из файла, вы на самом деле читаете строку althouou gh - целое число. Поэтому вам нужно сообщить компилятору upur, что вы хотите получить целочисленное значение.

Используйте это: highscore = Integer.parseInt (fileIn.next()); вместо этого

Классы Wrapper, такие как Integer, Long, Character и т. д., обеспечивают поддержку преобразования строк в соответствующие типы данных.!

Пример, если вы хотите долго значение, которое вы должны были использовать

= Long.parseLong Highscore (fileIn.next());

Thats it ..!

+0

На самом деле 'Scanner # nextInt' вызывает' Integer # parseInt' как часть его реализации;) http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java /util/Scanner.java#Scanner.nextInt%28int%29 – flakes

+0

Спасибо за помощь. Но есть новая ошибка, когда я ее заменил. Как это: Исключение в потоке «основной» java.lang.Error: Нерешенные проблемы компиляции: \t Несоответствие типов: невозможно преобразовать из INT в строку \t в TextFileDemo.main (TextFileDemo.java:25) Должен ли я пропустить что-то в линия импорта? – Jerry

+0

Не могли бы вы предоставить вам свой плеер.rtf? –

0

Ошибка указала, что при чтении из файла данных первое, что вы пытались прочитать с помощью nextInt(), на самом деле не было целым числом.

Проверьте, что находится в файле. В частности, в редакторе, который обрабатывает файл как неформатированные данные, например notepad.

Ваше имя файла указывает, что файл, который вы читаете, является файлом .rtf или «Rich Text Format». Сканер не может это прочитать.

Сохраните файл как обычный текстовый файл.

+0

Спасибо, я пытаюсь использовать .txt-файл раньше, но это та же проблема – Jerry

+0

Просто переименование 'player.rtf' в' player.txt' не изменяет кодировку файла; убедитесь, что ** сохраните ** файл как обычный текст. Если вы уверены, что файл является простым текстом, в качестве временной меры отладки, замените 'highscore = fileIn.nextInt(); fileIn.nextLine(); 'с' highscore = 1234; System.out.println ("Line =" + fileIn.nextLine()); "и сообщите нам, какой результат был для дальнейшей поддержки отладки. – AJNeufeld

+0

Я проверил информацию о файле, которая показывает, что это простой текст. Я изменил код в качестве вашей инструкции, и ошибка не появляется. Но результат странный, вот так: текст остается читать? истинная линия = {\ rtf1 \ ANSI \ ansicpg1252 \ cocoartf1404 \ cocoasubrtf460 Имя: {\ fonttbl \ f0 \ fswiss \ fcharset0 Helvetica;} Высокая оценка: 1234 текста слева читать? true – Jerry

0

Я не уверен, что я прав, но эта ошибка бросается, потому что вы можете попытаться совместить int с строкой. Возможно, из-за содержимого файла вы можете загрузить его на вопрос. Если вы собираетесь печатать на консоль, я предлагаю вам преобразовать все из них в строку.

Это может также помочь Input Mismatch Exception