我正在尝试从文件中读取信息并从该信息中创建对象。文件的每6行左右是一个不同的单位,这意味着第一组行与对象A相关,下一行与对象B相关,依此类推。
我可以从文件中读取并创建我的对象 - 第一组。我的问题是,我不知道如何让读者从创建下一个对象时所留下的位置接收...
(注意:创建文件的read()方法是正在创建的新对象的一部分,而不是main()或类似的东西)。以下是相关的代码:
司机:
public class CSD{
public static void main (String[] argv){
Vector V=new Vector(10);
CoS jon=new CoS();
jon.display();
}//end main
}
调用CoS,其构造函数为:
public CoS(){
try{
String fileName=getFileName();
FileReader freader=new FileReader(fileName);
BufferedReader inputFile=new BufferedReader(freader);
this.read(inputFile);
setDegree(major);
setStatus(credits);
} catch(FileNotFoundException ex){
}//end catch
}
调用read()和getFileName():
public void read(BufferedReader inputFile){
try{
int n;
super.read(inputFile);
String str=inputFile.readLine();
if (str!=null){
n=Integer.parseInt(str);
setCredits(n);
str=inputFile.readLine();
setMajor(str);
}//end if
}catch(IOException ex){}
}//end method
public String getFileName() {
Scanner scan = new Scanner(System.in);
String filename;
System.out.print("Enter the file name and path ==> ");
filename = scan.nextLine();
System.out.println("");
return filename;
}
先谢谢你,伙计们!
答案 0 :(得分:3)
为什么不使用ObjectInputStream和ObjectOutputStream?或者任何类型的真正序列化?
javadoc:http://docs.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html
示例代码:http://www.javadb.com/writing-objects-to-file-with-objectoutputstream
基本上,由于您将对象写入文件并想要处理它们所在的行,我将建议其他一些序列化替代方案。
一个是Object * Stream - 你在File上创建一个ObjectStream,只是通过它来编写对象。稍后当你阅读时,你按照你编写它们的相反顺序阅读对象,它们会像你写的那样回来。
另一个是实现Serializable 。还记得 transient 关键字吗?在您不想保存到文件的字段上使用它。
然后是原始的“手动”方法,您只保存要保存的内容,然后通过将这些初始化值传递给构造函数来重构对象。有点像人们建议您将文件行作为ctor的参数:)
编辑: 猜测用Object * Streams编写需要你实现Serializable或Externalizable。
但如果示例代码不够清楚,请询问:)