2014-01-20 3 views
0

Я написал этот код для чтения в файле, а затем запрошу отметку для каждого имени в файле. И если отметка превышает 40, ее пропуск и ниже - это сбой и записывают каждое имя в соответствующий файл. Но я получаю ошибку в строке 27, которая: while(namesFile.hasNext() вот мой код:Чтение и запись в текстовый файл

import java.io.*; 
import java.util.*; 

public class TestResults { 
    public static void main(String[] args) { 
     String errs = ""; 
     Scanner k = new Scanner(System.in); 

     try { 
      try (
        Scanner namesFile = new Scanner(new File("Names.txt")); 

        PrintWriter passFile = new PrintWriter("Pass.txt"); 
        PrintWriter failFile = new PrintWriter("Fail.txt");) { 

       while (namesFile.hasNext()) { 
        try { 
         String tempLine = namesFile.nextLine(); 
         System.out.println("Please Enter Mark For " + tempLine + " : "); 
         int mark = k.nextInt(); 
         if (mark >= 40) { 
          passFile.println(tempLine + " " + mark + "%"); 
         } else { 
          failFile.println(tempLine + " " + mark); 
         } 
        } catch (InputMismatchException ime) { 
         String valueStr = namesFile.next(); 
         errs += "\n\t" + valueStr; 
        } finally { 
         namesFile.close(); 
         passFile.close(); 
         failFile.close(); 
        } 
       } 
      } 
     } // Checks to see if file is there. 
     catch (IOException ioe) { 
      System.out.println("ERROR: " + ioe.getMessage()); 
     } 
    } 
} 
+3

Что означает сообщение об ошибке? – Fildor

+2

Почему существует try {try (? – Rahul

+0

Сделайте правильный код. – Rahul

ответ

1
public class TestResults { 

    public static void main(String[] args) { 
    Scanner namesFile; 
    PrintWriter passFile; 
    PrintWriter failFile; 


    String errs = ""; 
    Scanner k = new Scanner(System.in); 

    try { 
     try { 
       namesFile = new Scanner(new File("D:/Names.txt")); 

       passFile = new PrintWriter("D:/Pass.txt"); 
       failFile = new PrintWriter("D:/Fail.txt"); 



       try { 
        while (namesFile.hasNext()) { 
        String tempLine = namesFile.nextLine(); 
        System.out.println("Please Enter Mark For " + tempLine + " : "); 
        int mark = k.nextInt(); 
        if (mark >= 40) { 
         passFile.println(tempLine + " " + mark + "%"); 
        } else { 
         failFile.println(tempLine + " " + mark); 
        } 
        } 
       } catch (InputMismatchException ime) { 
        String valueStr = namesFile.next(); 
        errs += "\n\t" + valueStr; 
       } finally { 
        namesFile.close(); 
        passFile.close(); 
        failFile.close(); 
       } 



     } 
     catch(IOException ioe){ 
      System.out.println("ERROR: " + ioe.getMessage()); 
     } 



    } // Checks to see if file is there. 
    catch (Exception e) { 

    } 

    } 
} 
+0

Что вы больше всего улучшаете? – Fildor

+0

в коде SomeSickJoke именаFile не входят в область while(). Это ошибка. И он написал заключительный блок внутри цикла while. Это заставляет файл читать одну строку и закрывать поток. поэтому 2-я строка не может быть прочитана. Я поставил цикл while внутри блока try. И он работает правильно. –

+0

Да, это так. Это «попытка с ресурсами». См. [Здесь] (http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html). – Fildor

Смежные вопросы