2013-09-24 10 views
-3

У меня есть вопрос о PrintWriter в Java, вот мой код:PrintWriter путаница

import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.io.PrintWriter; 
    import java.util.Scanner; 


public class Out { 

public static void main(String[] args) { 

    try{ 
File a=new File("C:/Users/Acer/Desktop/abc.txt"); 
PrintWriter out=new PrintWriter(a); 
Scanner c=new Scanner(System.in); 


while(c.hasNextInt()){ 
    out.printf("%d", c.nextInt()); 
    out.println(); 
c.close(); 
} 
out.close(); 
System.out.println("input written into file successfully!"); 
    } 
    catch(FileNotFoundException e){ 
System.out.println("The file not found"); 


    } 
} 

    } 

После того как я запустить программу, содержание файла аЬс теряется, то я выполнял функцию сканера для типа 1 2 3 4 5, она показывает erros:

1 2 3 4 5 
    Exception in thread "main" java.lang.IllegalStateException: Scanner closed 
at java.util.Scanner.ensureOpen(Unknown Source) 
at java.util.Scanner.hasNext(Unknown Source) 
at java.util.Scanner.hasNextInt(Unknown Source) 
at java.util.Scanner.hasNextInt(Unknown Source) 
at Out.main(Out.java:17) 

предполагается вывести:

 1 
    2 
    3 
    4 
    5 

Но кажется, что пр ogram cannnot найти файл, я не уверен, какая часть не так, пожалуйста, помогите, ура!

+0

почему они сделали голосование вас? – user2705620

ответ

2

Вы звоните hasNextInt() метод на закрытом Scanner объект c, который дает вам право на исполнение.

так c.close(); должны быть вне while петли

+0

Привет, спасибо за помощь, да, кажется, что сообщение об ошибке исчезло, но когда я набираю 1 2 3 4 5, у него нет ответа вообще, какой результат я должен ожидать? –

+0

@WangPeiTheDancer Чтобы получить ответ, вам нужно ввести нецелое значение, чтобы оно вышло из цикла. Например, введите ввод как '1 2 3 4 5 h' – Prabhaker

+1

@WangPeiTheDancer add out.flush(); в вашем цикле, который будет печатать данные в файле каждый цикл-итерация – JohnnyAW

1

Вы закрываете Scanner объект внутри самого цикла!

Попробуйте поместить его вне петли.

while(c.hasNextInt()){ 
    out.printf("%d", c.nextInt()); 
    out.println(); 
} 
c.close(); 

Ваш ожидаемый результат:

input written into file successfully! 

И не:

1 
2 
3 
4 
5 
0

Попробуйте

while(c.hasNextInt()){ 
out.printf("%d", c.nextInt()); 
out.println(); 
} 
c.close();