2013-09-24 169 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"); 


    } 
} 

    } 

我运行该程序后,文件ABC的内容丢失,然后我进行扫描功能输入1 2 3 4 5,它示出了误差修改:

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 

但似乎在PR没有找到该文件,我不确定哪个部分是错误的,请帮助,欢呼!

+0

为什么他们做投票吗? – user2705620

回答

2

您正在致电hasNextInt()方法在关闭Scanner对象c,给你execption。

所以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();