在操作I/O流的时候发生了一些错误,求大家帮帮忙

a1411473204 2016-09-25 06:45:43
先给上源代码
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.DataOutputStream;
import java.io.DataInputStream;
public class J_Read {
public static void main(String[] args)
{
// TODO Auto-generated method stub
int sum=0,average=0;
int []a=new int[5];
try
{
FileOutputStream grade=new FileOutputStream("data.txt");
DataOutputStream dout=new DataOutputStream(grade);
for(int i=0;i<5;i++)
dout.write((int)(Math.random()*100)+20 );
dout.close();
FileInputStream gradeIn=new FileInputStream("data.txt");
DataInputStream fin=new DataInputStream(gradeIn);
for(int j=0;j<5;j++)
sum+=fin.readInt();
average=sum/5;
for(int i=0;i<5;i++)
a[i]=fin.readInt();
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
{
if(a[i]>a[j])
{
int t=a[j];
a[j]=a[i];
a[i]=t;
}
}
fin.close();
}
catch(Exception e)
{
System.out.println("发生异常"+e);
e.printStackTrace();
}
System.out.println("这5个学生的平均成绩为: "+average);
System.out.print("这5个学生的成绩为: ");
for(int i=0;i<5;i++)
System.out.print(a[i]+" ");
}
}
//本代码的目的:编写一个程序,要求输入5个学生的成绩,并且保存到文件“data.txt"中,求解并输出其平均数,然后读取文件,把成绩从小到大输出
但是运行的时候却发生了错误,写进文件里面的只是一个乱码。
错误信息如下:
发生异常java.io.EOFException
这5个学生的平均成绩为: 0
这5个学生的成绩为: 0 0 0 0 0 java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at J_Read.main(J_Read.java:22)
求解,代码较长,辛苦各位大牛了
...全文
164 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
肃穆丶 2016-09-26
  • 打赏
  • 举报
回复

public static void main(String[] args) {
		int sum = 0, average = 0;
		int[] a = new int[5];
		try {
			OutputStream grade = new FileOutputStream("D:/data.txt");
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(grade));
			for (int i = 0; i < 5; i++) {
				int temp = (int) (Math.random() * 100) + 20;
				bw.write("" + temp + "");
				bw.newLine();
			}
			bw.flush();
			bw.close();
			FileInputStream gradeIn = new FileInputStream("D:/data.txt");
			BufferedReader br = new BufferedReader(new InputStreamReader(gradeIn));
			for (int j = 0; j < 5; j++) {
				a[j]=Integer.parseInt(br.readLine());
				sum +=a[j];
			}
			average = sum / 5;
			for (int i = 0; i < 5; i++) {
				for (int j = 0; j < 5; j++) {
					if (a[i] > a[j]) {
						int t = a[j];
						a[j] = a[i];
						a[i] = t;
					}
				}
			}
			br.close();
		} catch (Exception e) {
			System.out.println("发生异常" + e);
			e.printStackTrace();
		}
		System.out.println("这5个学生的平均成绩为: " + average);
		System.out.print("这5个学生的成绩为: ");
		for (int i = 0; i < 5; i++)
			System.out.print(a[i] + " ");
	}

这5个学生的平均成绩为: 95 这5个学生的成绩为: 117 111 105 92 51
  • 打赏
  • 举报
回复
你这个代码有两个问题,第一个是我发的代码的第九行,dout.write()你原来是这么写的,dout.write()这个方法只会把你传入的int值的低八位写入到文件中,而且写入的是int值低八位对应的ascii码,所以使用write的方法时其实只向文件中写入了5个字节,而使用writeInt方法向文件中写入了20个字节,fin.readInt()这个方法是每次读取4字节作为一个int,当读到文件末尾时再次调用该方法会抛出java.io.EOFException异常
  • 打赏
  • 举报
回复
public static void main(String[] args) {
		int sum = 0, average = 0;
		int[] a = new int[5];
		try {
			FileOutputStream grade = new FileOutputStream("d:/data.txt");
			DataOutputStream dout = new DataOutputStream(grade);
			for (int i = 0; i < 5; i++){
				int temp = (int) (Math.random() * 100) + 20;
				dout.writeInt(temp);
			}
			dout.close();
			FileInputStream gradeIn = new FileInputStream("d:/data.txt");
			DataInputStream fin = new DataInputStream(gradeIn);
			for (int i = 0; i < 5; i++){
				a[i] = fin.readInt();
				sum += a[i];
			}
			average = sum / 5;
			for (int i = 0; i < 5; i++)
				for (int j = 0; j < 5; j++) {
					if (a[i] > a[j]) {
						int t = a[j];
						a[j] = a[i];
						a[i] = t;
					}
				}
			fin.close();
		} catch (Exception e) {
			System.out.println("发生异常" + e);
			e.printStackTrace();
		}
		System.out.println("这5个学生的平均成绩为: " + average);
		System.out.print("这5个学生的成绩为: ");
		for (int i = 0; i < 5; i++)
			System.out.print(a[i] + " ");
	}
肃穆丶 2016-09-26
  • 打赏
  • 举报
回复
要不把写入成绩时的 for循环价格{ } 试试?

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧