2015-01-03 38 views
0

我想从文件中读取对象并将数据放置到LinkedList并将引用返回给它。但是当我尝试这个方法时,它返回没有数据的LinkedList。无法从文件中读取对象并将它们放到java中的链接列表中

private static LinkedList<Course> readFromFile(String fileName) 
     throws FileNotFoundException, IOException { 
    LinkedList<Course> tmp = new LinkedList<Course>(); 

    reader = new ObjectInputStream(new FileInputStream(fileName)); 

    try { 
     LinkedList<Course> readObject2 = (LinkedList<Course>) reader 
       .readObject(); 
     LinkedList<Course> readObject = readObject2; 
     tmp = readObject; 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 

    return tmp; 
} 

我的写作方法看起来像这样

private static boolean writeToFile(String fileName, LinkedList<Course> templist) 
     throws IOException { 
    LinkedList<Course> templist1 = new LinkedList<Course>(); 

    if (createFile(fileName)) { 
     FileOutputStream outF = new FileOutputStream(fileName); 

     outO = new ObjectOutputStream(outF); 
     outO.writeObject(templist1); 

     //outO.flush(); 
     return true; 
    } 
    else 
     return false; 
} 

写作方法看起来像这样

private static boolean writeToFile(String fileName, LinkedList<Course> templist) throws IOException { 
    LinkedList<Course> templist1 = new LinkedList<Course>(); 

    if (createFile(fileName)) { 
     FileOutputStream outF = new FileOutputStream(fileName); 

     outO = new ObjectOutputStream(outF); 
     outO.writeObject(templist1); 

     //outO.flush(); 
     return true; 
    } 
    else 
     return false; 
} 
+2

请问您的文件的存储对象名单在里面? – SMA

+1

你是如何序列化你的课程的?你有序列化整个列表'writeObject(LinkedListOfCourses)'还是你分别序列化每个课程'writeObject(Course1),...,writeObject(CourseX)'。 – Pshemo

+0

要使用更多详细信息更新您的问题,请使用您的帖子下方的[[edit]]选项。 – Pshemo

回答

1

类实现java.io.Serializable课程?
当您使用ObjectInputStream从文件中读取对象时,它应该与您之前使用ObjectOutputStream存储它的顺序相同。和相同的对象类型。

如果您尝试阅读:

(LinkedList<Course>) reader.readObject(); 

你必须有店呢喜欢:

ObjectOutputStream writer = new ObjectOutputStream(
     new FileOutputStream(fileName)); 

writer.writeObject(yourLinkedListToSave); 

当你的代码如下:

private static boolean writeToFile(String fileName, LinkedList<Course> templist) throws IOException { 
    // Dont forget to initialize with your list else the list still empty 
    LinkedList<Course> templist1 = new LinkedList<Course>(templist); 

    if (createFile(fileName)) { 
     FileOutputStream outF = new FileOutputStream(fileName); 

     outO = new ObjectOutputStream(outF); 
     outO.writeObject(templist1); 

     //outO.flush(); 
     return true; 
    } 
    else 
     return false; 
} 
+0

写的方法是这样的,我觉得它像存储你想要的东西 私有静态布尔将writeToFile(字符串文件名,LinkedList的 templist)抛出IOException异常{ \t \t \t \t LinkedList的 templist1 =新的LinkedList (); \t \t \t 如果\t(CREATEFILE(文件名)){ \t \t \t \t \t FileOutputStream中OUTF =新FileOutputStream中(文件名); outO = new ObjectOutputStream(outF); outO.writeObject(templist1); // outO。冲洗(); \t \t return true; \t \t} \t \t \t \t其他 \t \t \t返回FALSE; \t} –

+0

使用'LinkedList templist1 = new LinkedList (templist);'否则您正在存储的LinkedList仍为空。 – Nemolovich

+0

感谢它帮助了我很多并解决了问题。问题是你提到的问题。 –

相关问题