//tea.txt 是一个文件,保存的几个类对象
//faculty是所保存类的类类型public static void read()
{try
{ObjectInputStream p=new ObjectInputStream(new FileInputStream("tea.txt"));
String output=new String();
int i=0;
while((t=(faculty)(p.available()))!=0)
output+=t[i].getname()+" "+t[i].getnum()+"\n";
JOptionPane.showMessageDialog(null,output);
p.close();}
catch(Exception ex)
{
}}}按照我这种方法读不出来,但是我如果单独这样测试的话是有结果的:
t[0]=new faculty();
t[0]=(faculty)p.readObject();
output+=t[0].getname()+" "+t[0].getnum()+"\n";
JOptionPane.showMessageDialog(null,output);
既然这样有结果,那为什么循环没有呢?
并且如果我继续再写一段上面的东西的话,就什么都没有了,好奇怪啊!
faculty[] t=new faculty[3];
String output= "";
int i=0;
faculty data = (faculty)p.readObject();
while(data != null) {
t[i]=data;
data = (faculty)p.readObject();
output+=t[i].getname()+" "+t[i].getnum()+"\n";
i++;
if (i>2) break;
}
p.close();前提是,你的文件也是通过 writeObject()写进去的。
这句话好象没有用,我是这样写的:
ObjectOutputStream p=new ObjectOutputStream(new FileOutputStream("stu.txt",true));
p.writeObject(stu);
p.close();在帮我看看
ObjectOutputStream p=new ObjectOutputStream(new FileOutputStream("tea.txt",true));
p.writeObject(tea);
p.close();
package zhangshu.test.test1;import java.io.Serializable;public class DataClass implements Serializable{
int i;
String s;
String s1;
public DataClass(int i,String s,String s1) {
this.i = i;
this.s = s;
this.s1 = s1;
}
}这是测试程序;
package zhangshu.test.test1;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;public class Test5 { /**
* @param args
*/
public static void main(String[] args) {
DataClass iC1 = new DataClass(1,"a","b");
DataClass iC2 = new DataClass(2,"cc","dd");
try {
FileOutputStream fOStream = new FileOutputStream("c:/aaa.dat");
ObjectOutputStream fos = new ObjectOutputStream(fOStream);
fos.writeObject(iC1);
fos.writeObject(iC2);
fOStream.close();
fos.close();
FileInputStream fIStream = new FileInputStream("c:/aaa.dat");
ObjectInputStream fis = new ObjectInputStream(fIStream);
DataClass data;
while (fIStream.available() > 0) {
data = (DataClass)fis.readObject();
System.out.println(data.i);
System.out.println(data.s);
System.out.println(data.s1);
}
fIStream.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}jdk1.5.03b下正常通过,你稍微改下就可以用到你的程序你。
估计是ObjectInputStream这个家伙的available方法,直接调用了父类的
方法,java doc里面写了它的父类InputStream的available方法永远返回0,
所以只好通过文件流的available来判断。
这是我的程序部分代码,我用Eclipse平台:
class faculty implements Serializable
{private String name;
private String num;public void setname()
{name=JOptionPane.showInputDialog(null,"input the name");
}public void setnum()
{num=JOptionPane.showInputDialog(null,"input the num");
}public void setup()
{setname();
setnum();
save();
}public static void save(faculty tea)
{try
{ObjectOutputStream p=new ObjectOutputStream(new FileOutputStream("tea.txt",true));
p.writeObject(tea);
p.close();
}
catch(Exception ex)
{
}
}
public static void read()
{get();
try
{ObjectInputStream p=new ObjectInputStream(new FileInputStream("tea.txt"));
faculty t=new faculty();
String output=new String();
int i=0;while((t=(faculty)(p.readObject()))!=null)
{
output+=t.getname()+" "+t.getnum()+"\n";
}
JOptionPane.showMessageDialog(null,output);
p.close();
}catch(Exception ex)
{
}
}
如果我这样读,就写一次,
t=(faculty)(p.readObject());
output+=t.getname()+" "+t.getnum()+"\n";
JOptionPane.showMessageDialog(null,output);
这样会输出我第一次保存的对象数据,但是如果我再写一次
t=(faculty)(p.readObject());
output+=t.getname()+" "+t.getnum()+"\n";
JOptionPane.showMessageDialog(null,output);
就什么也没有了,就是把JOptionPane.showMessageDialog(null,output);改为
JOptionPane.showMessageDialog(null,"****");也不会有任何结果.....
帮忙看看!
faculty.javaimport java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;import javax.swing.JOptionPane;class faculty implements Serializable {
private String name;
private String num; public void setname() {
name=JOptionPane.showInputDialog(null,"input the name");
}
public void setnum() {
num=JOptionPane.showInputDialog(null,"input the num");
} public static void setup(){
ArrayList teaList = get();
faculty f = new faculty();
f.setname();
f.setnum();
teaList.add(f);
save(teaList);
} public static void save(ArrayList teaList) {
try {
FileOutputStream fos = new FileOutputStream("c:/tea.txt");
ObjectOutputStream p=new ObjectOutputStream(fos);
for (int i=0; i<teaList.size(); i++) {
p.writeObject(teaList.get(i));
}
fos.close();
p.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
public static ArrayList get() {
ArrayList list = new ArrayList();
try {
FileInputStream fis = new FileInputStream("c:/tea.txt");
ObjectInputStream p = new ObjectInputStream(fis);
faculty t;
String output = "";
int i=0; while(fis.available() > 0){
t = (faculty)(p.readObject());
list.add(t);
}
fis.close();
p.close();
return list;
} catch(Exception ex){
ex.printStackTrace();
return list;
}
}
public static void read() {
try {
FileInputStream fis = new FileInputStream("c:/tea.txt");
ObjectInputStream p = new ObjectInputStream(fis);
faculty t;
String output = "";
int i=0; while(fis.available() > 0){
t = (faculty)(p.readObject());
output+=t.getName()+" "+t.getNum()+"\n";
}
JOptionPane.showMessageDialog(null,output);
fis.close();
p.close();
} catch(Exception ex){
ex.printStackTrace();
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
}测试程序
/**
*
*//**
* @author wdman
*
*/
public class TestFaculty { /**
* @param args
*/
public static void main(String[] args) {
faculty fac = new faculty();
fac.setup();
faculty.read();
}}