用ObjectInputStream从文件读全部的学生类(只有学生类)。求指点 是在readObject的堵塞了吧。麻烦把问题描述清晰些 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道楼主的遇到的问题什么,List是可以一次读取的,写了示例如下:import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class ObjectSerlizable { public static void main(String[] args) { // TODO Auto-generated method stub List<Student> list = new ArrayList<Student>(); Collections.addAll(list, new Student(1,"Jack", 99,98,100), new Student(2,"Tom", 93,95,90), new Student(3,"John", 95,97,80), new Student(4,"Wilson", 99,91,89)); writeObject(list); readObject(); } public static void readObject() { try { FileInputStream fis = new FileInputStream("student.txt"); ObjectInputStream ois = new ObjectInputStream(fis);; List<Student> list = (List<Student>) ois.readObject(); int i = 0; for (Student student : list) { System.out.print("第" + (i + 1) + "个读出的学生的学号:"); System.out.println(student.getId()); System.out.print("第" + (i + 1) + "个读出的学生的姓名:"); System.out.println(student.getName()); System.out.print("第" + (i + 1) + "个读出的学生的语文成绩:"); System.out.println(student.getChinese()); System.out.print("第" + (i + 1) + "个读出的学生的英语成绩:"); System.out.println(student.getEnglish()); System.out.print("第" + (i + 1) + "个读出的学生的数学成绩:"); System.out.println(student.getMath()); System.out.println("======================================"); i++; } ois.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void writeObject(List<Student> list) { try { FileOutputStream fos = new FileOutputStream("student.txt"); ObjectOutputStream os = new ObjectOutputStream(fos); os.writeObject(list); os.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}class Student implements Serializable{ private int id; private String name; private float chinese; private float english; private float math; public Student(int id, String name, float chinese, float english, float math) { this.id= id; this.name = name; this.chinese = chinese; this.english = english; this.math = math; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getChinese() { return chinese; } public void setChinese(float chinese) { this.chinese = chinese; } public float getEnglish() { return english; } public void setEnglish(float english) { this.english = english; } public float getMath() { return math; } public void setMath(float math) { this.math = math; } }输出结果如下:第1个读出的学生的学号:1第1个读出的学生的姓名:Jack第1个读出的学生的语文成绩:99.0第1个读出的学生的英语成绩:98.0第1个读出的学生的数学成绩:100.0======================================第2个读出的学生的学号:2第2个读出的学生的姓名:Tom第2个读出的学生的语文成绩:93.0第2个读出的学生的英语成绩:95.0第2个读出的学生的数学成绩:90.0======================================第3个读出的学生的学号:3第3个读出的学生的姓名:John第3个读出的学生的语文成绩:95.0第3个读出的学生的英语成绩:97.0第3个读出的学生的数学成绩:80.0======================================第4个读出的学生的学号:4第4个读出的学生的姓名:Wilson第4个读出的学生的语文成绩:99.0第4个读出的学生的英语成绩:91.0第4个读出的学生的数学成绩:89.0====================================== 是在readObject的堵塞了吧。麻烦把问题描述清晰些我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的 对象 也一起读出来。 我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的 对象 也一起读出来。 我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的 对象 也一起读出来。 上面的代码完全可以实现你想要的功能 我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的 对象 也一起读出来。 上面的代码完全可以实现你想要的功能我的程序是有个inputaa()函数,手动输入几个学生对象。比如我第一次执行这个程序,我已经存入了2个学生对象到文件里面。我第二次再执行这个程序的时候。我只能读出这次程序输入的学生对象。第一次执行程序保存在文件中的 那两个 学生对象。我读不到。 因为前面可以有N个 学生对象。我不知道有多少。 懂我的意思吗? 另外, 我在上面的程序做了改进。 有点小问题。 麻烦 可以帮我看一下。 程序在下面 import java.io.*;import java.util.*; //每次处理,会覆盖以前的内容。 每次运行,TXT文件会重新覆盖。 怎么处理???? public class StudentTest { /** * @param args */ public static void main(String[] args){ // TODO Auto-generated method stub System.out.println("请输入学生数量"); Scanner in = new Scanner(System.in); int num = in.nextInt(); int listNum = getNum(); List<Student> sa = new ArrayList<Student>(); InputMethod(num,sa,in); writeMethod(num,sa); readMehod(listNum); } public static int getNum() { Properties settings = new Properties(); int c = 0; try { settings.load(new FileInputStream("count.txt")); } catch(Exception e) { settings.setProperty("count", String.valueOf(0)); } c = Integer.parseInt(settings.getProperty("count"))+1; settings.setProperty("count", Integer.toString(c)); try { settings.store(new FileOutputStream("count.txt"), "listNum"); } catch(Exception ex) { ex.printStackTrace(); } return c; } public static void InputMethod(int num,List<Student> sa,Scanner in) //输入赋值函数 { for(int i=1;i<num+1;i++) { try { Student stu = new Student(); //Scanner in = new Scanner(System.in); System.out.println("请输入第"+i+"个人的学号"); stu.setId(in.nextInt()); System.out.println("请输入第"+i+"个人的名字"); stu.setName(in.next()); System.out.println("请输入第"+i+"个人的语文成绩"); stu.setChinese(in.nextFloat()); System.out.println("请输入第"+i+"个人的英语成绩"); stu.setEnglish(in.nextFloat()); System.out.println("请输入第"+i+"个人的数学成绩"); stu.setMath(in.nextFloat()); sa.add(stu); } catch(Exception e) { e.getStackTrace(); } } } public static void writeMethod(int num,List<Student> sa) //写入 文件 { try { FileOutputStream fos = new FileOutputStream("student.txt",true); ObjectOutputStream oos = new ObjectOutputStream(fos); List<Student> list = sa; oos.writeObject(list); oos.close(); } catch(Exception e) { e.getStackTrace(); } } public static void readMehod(int listNum) //从文件读出 { try { FileInputStream fis = new FileInputStream("student.txt"); ObjectInputStream ois = new ObjectInputStream(fis); for(int j=0;j<listNum;j++) { List<Student> sn = (List<Student>)ois.readObject(); int i = 0; for(Student sb:sn) { //System.out.println("for"); //Student stu = (Student)sb; System.out.print("第"+(i+1)+"个读出的学生的学号:"); System.out.println(sb.getId()); System.out.print("第"+(i+1)+"个读出的学生的姓名:"); System.out.println(sb.getName()); System.out.print("第"+(i+1)+"个读出的学生的语文成绩:"); System.out.println(sb.getChinese()); System.out.print("第"+(i+1)+"个读出的学生的英语成绩:"); System.out.println(sb.getEnglish()); System.out.print("第"+(i+1)+"个读出的学生的数学成绩:"); System.out.println(sb.getMath()); i++; } } ois.close(); } catch(Exception e) { e.getStackTrace(); } }}import java.io.*;public class Student implements Serializable{ private int intId; private String strName; private float fChinese; private float fEnglish; private float fMath; public float averageOne() { return (fChinese+fEnglish+fMath)/3; } public void setId(int intId) { this.intId = intId; } public void setName(String strName) { this.strName = strName; } public void setChinese(float fChinese) { this.fChinese = fChinese; } public void setEnglish(float fEnglish) { this.fEnglish = fEnglish; } public void setMath(float fMath) { this.fMath = fMath; } public int getId() { return intId; } public String getName() { return strName; } public float getChinese() { return fChinese; } public float getEnglish() { return fEnglish; } public float getMath() { return fMath; } } 我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的 对象 也一起读出来。 上面的代码完全可以实现你想要的功能我的程序是有个inputaa()函数,手动输入几个学生对象。比如我第一次执行这个程序,我已经存入了2个学生对象到文件里面。我第二次再执行这个程序的时候。我只能读出这次程序输入的学生对象。第一次执行程序保存在文件中的 那两个 学生对象。我读不到。 因为前面可以有N个 学生对象。我不知道有多少。 懂我的意思吗? 另外, 我在上面的程序做了改进。 有点小问题。 麻烦 可以帮我看一下。 程序在下面每次存之前,都先读取出来和刚才输入的合并到一块再一次保存呗。 component.paint(Graphics)如何使用?什么原理? 大家看这个计算题还有什么可以优化的地方不? 关于String源代码的问题 内部类怎么调用外部类的对象? 怎么安装JAVE服务器 高分请教unix系统下窗口前端显示的问题 请教大家一个问题,请帮忙看看,用不了多长时间~~ 请问如何获得一个Image对象的size,也就是长和宽? 要出人命啦!!! java的JComboBox设为可编辑的,但怎样获得用户自己输入得值? 各位大侠,那里可以找到Inprise Application Server char 一个发牌的程序,拍光是拿在手上肯定还是不够的,我想给手牌排序
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ObjectSerlizable { public static void main(String[] args) {
// TODO Auto-generated method stub List<Student> list = new ArrayList<Student>();
Collections.addAll(list,
new Student(1,"Jack", 99,98,100),
new Student(2,"Tom", 93,95,90),
new Student(3,"John", 95,97,80),
new Student(4,"Wilson", 99,91,89));
writeObject(list);
readObject();
} public static void readObject() {
try {
FileInputStream fis = new FileInputStream("student.txt");
ObjectInputStream ois = new ObjectInputStream(fis);;
List<Student> list = (List<Student>) ois.readObject(); int i = 0;
for (Student student : list) {
System.out.print("第" + (i + 1) + "个读出的学生的学号:");
System.out.println(student.getId());
System.out.print("第" + (i + 1) + "个读出的学生的姓名:");
System.out.println(student.getName());
System.out.print("第" + (i + 1) + "个读出的学生的语文成绩:");
System.out.println(student.getChinese());
System.out.print("第" + (i + 1) + "个读出的学生的英语成绩:");
System.out.println(student.getEnglish());
System.out.print("第" + (i + 1) + "个读出的学生的数学成绩:");
System.out.println(student.getMath());
System.out.println("======================================");
i++;
}
ois.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void writeObject(List<Student> list) {
try {
FileOutputStream fos = new FileOutputStream("student.txt");
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(list);
os.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}class Student implements Serializable{
private int id;
private String name;
private float chinese;
private float english;
private float math;
public Student(int id, String name,
float chinese, float english, float math)
{
this.id= id;
this.name = name;
this.chinese = chinese;
this.english = english;
this.math = math;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getChinese() {
return chinese;
}
public void setChinese(float chinese) {
this.chinese = chinese;
}
public float getEnglish() {
return english;
}
public void setEnglish(float english) {
this.english = english;
}
public float getMath() {
return math;
}
public void setMath(float math) {
this.math = math;
}
}
输出结果如下:
第1个读出的学生的学号:1
第1个读出的学生的姓名:Jack
第1个读出的学生的语文成绩:99.0
第1个读出的学生的英语成绩:98.0
第1个读出的学生的数学成绩:100.0
======================================
第2个读出的学生的学号:2
第2个读出的学生的姓名:Tom
第2个读出的学生的语文成绩:93.0
第2个读出的学生的英语成绩:95.0
第2个读出的学生的数学成绩:90.0
======================================
第3个读出的学生的学号:3
第3个读出的学生的姓名:John
第3个读出的学生的语文成绩:95.0
第3个读出的学生的英语成绩:97.0
第3个读出的学生的数学成绩:80.0
======================================
第4个读出的学生的学号:4
第4个读出的学生的姓名:Wilson
第4个读出的学生的语文成绩:99.0
第4个读出的学生的英语成绩:91.0
第4个读出的学生的数学成绩:89.0
======================================
是在readObject的堵塞了吧。麻烦把问题描述清晰些我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的 对象 也一起读出来。
上面的代码完全可以实现你想要的功能
上面的代码完全可以实现你想要的功能我的程序是有个inputaa()函数,手动输入几个学生对象。比如我第一次执行这个程序,我已经存入了2个学生对象到文件里面。我第二次再执行这个程序的时候。我只能读出这次程序输入的学生对象。第一次执行程序保存在文件中的 那两个 学生对象。我读不到。 因为前面可以有N个 学生对象。我不知道有多少。 懂我的意思吗? 另外, 我在上面的程序做了改进。 有点小问题。 麻烦 可以帮我看一下。 程序在下面
import java.util.*; //每次处理,会覆盖以前的内容。 每次运行,TXT文件会重新覆盖。 怎么处理????
public class StudentTest { /**
* @param args
*/
public static void main(String[] args){
// TODO Auto-generated method stub
System.out.println("请输入学生数量");
Scanner in = new Scanner(System.in);
int num = in.nextInt();
int listNum = getNum();
List<Student> sa = new ArrayList<Student>();
InputMethod(num,sa,in);
writeMethod(num,sa);
readMehod(listNum);
}
public static int getNum()
{
Properties settings = new Properties();
int c = 0;
try
{
settings.load(new FileInputStream("count.txt"));
}
catch(Exception e)
{
settings.setProperty("count", String.valueOf(0));
}
c = Integer.parseInt(settings.getProperty("count"))+1;
settings.setProperty("count", Integer.toString(c));
try
{
settings.store(new FileOutputStream("count.txt"), "listNum");
}
catch(Exception ex)
{
ex.printStackTrace();
}
return c;
}
public static void InputMethod(int num,List<Student> sa,Scanner in) //输入赋值函数
{
for(int i=1;i<num+1;i++)
{
try
{
Student stu = new Student();
//Scanner in = new Scanner(System.in);
System.out.println("请输入第"+i+"个人的学号");
stu.setId(in.nextInt());
System.out.println("请输入第"+i+"个人的名字");
stu.setName(in.next());
System.out.println("请输入第"+i+"个人的语文成绩");
stu.setChinese(in.nextFloat());
System.out.println("请输入第"+i+"个人的英语成绩");
stu.setEnglish(in.nextFloat());
System.out.println("请输入第"+i+"个人的数学成绩");
stu.setMath(in.nextFloat());
sa.add(stu);
}
catch(Exception e)
{
e.getStackTrace();
}
}
}
public static void writeMethod(int num,List<Student> sa) //写入 文件
{
try
{
FileOutputStream fos = new FileOutputStream("student.txt",true);
ObjectOutputStream oos = new ObjectOutputStream(fos);
List<Student> list = sa;
oos.writeObject(list);
oos.close();
}
catch(Exception e)
{
e.getStackTrace();
}
}
public static void readMehod(int listNum) //从文件读出
{
try
{
FileInputStream fis = new FileInputStream("student.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
for(int j=0;j<listNum;j++)
{
List<Student> sn = (List<Student>)ois.readObject();
int i = 0;
for(Student sb:sn)
{
//System.out.println("for");
//Student stu = (Student)sb;
System.out.print("第"+(i+1)+"个读出的学生的学号:");
System.out.println(sb.getId());
System.out.print("第"+(i+1)+"个读出的学生的姓名:");
System.out.println(sb.getName());
System.out.print("第"+(i+1)+"个读出的学生的语文成绩:");
System.out.println(sb.getChinese());
System.out.print("第"+(i+1)+"个读出的学生的英语成绩:");
System.out.println(sb.getEnglish());
System.out.print("第"+(i+1)+"个读出的学生的数学成绩:");
System.out.println(sb.getMath());
i++;
}
}
ois.close();
}
catch(Exception e)
{
e.getStackTrace();
}
}}import java.io.*;
public class Student implements Serializable{
private int intId;
private String strName;
private float fChinese;
private float fEnglish;
private float fMath;
public float averageOne()
{
return (fChinese+fEnglish+fMath)/3;
}
public void setId(int intId)
{
this.intId = intId;
}
public void setName(String strName)
{
this.strName = strName;
}
public void setChinese(float fChinese)
{
this.fChinese = fChinese;
}
public void setEnglish(float fEnglish)
{
this.fEnglish = fEnglish;
}
public void setMath(float fMath)
{
this.fMath = fMath;
}
public int getId()
{
return intId;
}
public String getName()
{
return strName;
}
public float getChinese()
{
return fChinese;
}
public float getEnglish()
{
return fEnglish;
}
public float getMath()
{
return fMath;
} }
上面的代码完全可以实现你想要的功能我的程序是有个inputaa()函数,手动输入几个学生对象。比如我第一次执行这个程序,我已经存入了2个学生对象到文件里面。我第二次再执行这个程序的时候。我只能读出这次程序输入的学生对象。第一次执行程序保存在文件中的 那两个 学生对象。我读不到。 因为前面可以有N个 学生对象。我不知道有多少。 懂我的意思吗? 另外, 我在上面的程序做了改进。 有点小问题。 麻烦 可以帮我看一下。 程序在下面
每次存之前,都先读取出来和刚才输入的合并到一块再一次保存呗。