所以我花了一些时间来修复调试中的所有错误并运行我从我的intro Java类编写的程序。但是现在它在第一次输入后给我以下错误。
Exception in thread "main" java.io.IOException: Stream closed
at sun.nio.cs.StreamDecoder.ensureOpen(StreamDecoder.java:46)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:148)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at StatsDemo.main(StatsDemo.java:54)
我根据评论和说明在println下写了所有内容。但我不确定是什么问题。它应该要求输入文件numbers.txt但在我输入文件后,它会给我这个错误。
import java.text.DecimalFormat;
import java.util.Scanner;
import java.io.*;
public class StatsDemo
{
public static void main(String [] args) throws IOException
{
double sum = 0;
int count = 0;
double mean = 0;
double stdDev = 0;
double difference;
DecimalFormat threeDecimals = new DecimalFormat("0.000");
Scanner keyboard = new Scanner (System.in);
String filename;
System.out.println("This program calculates statistics"
+ "on a file containing a series of numbers");
System.out.print("Enter the file name: ");
filename = keyboard.nextLine();
答案 0 :(得分:1)
您正在阅读的第二个循环:
line = in.readLine();
当你的开放流被称为in2。
即你正在阅读错误的封闭流。
另外,作为一种好的做法,你应该关闭最顶层的读者而不是最内层的读者,即你应该使用in.close()而不是file.close();
同花顺的目的:
如果您查看PrintWriter的源代码,您会看到它使用内部缓冲区:
public PrintWriter(File file, String csn)
throws FileNotFoundException, UnsupportedEncodingException
{
this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), csn)),
false);
}
该缓冲区不会立即将输出发送到基础输出流。它会将输出保存在内存中,直到刷新为止。通常,当输出包含新行时,会自动进行刷新。否则,您需要手动刷新缓冲区以确保输出实际写入。