1. 程式人生 > >java中遍歷物件流寫入的檔案

java中遍歷物件流寫入的檔案

在用物件序列化寫入檔案後,特別是多物件的情況。比如說一個學生管理系統,有多個person,要想把所有的學生都資料都儲存在一個檔案中,可以有兩種方法:

一、把所有學生的資料都儲存在一個容器中,然後將這個容器一個物件寫入檔案,再用物件的反序列化從檔案中讀取出來就行了。(這裡就不多說了)

二、把每個學生的資料(每個物件)一次存進檔案中,這時檔案就有多個物件存在了,要想把這些物件一個一個的讀取出來,就需要用到這個檔案。

比如說學生的資料為一個類:

public class stu{
private String name;
private String sex;
private int age;
public stu(String name, String sex, int age){
this.name = name;
this.sex = sex;
this.age = age;
}
//get、set方法省略
}

我們寫入時就是這樣寫入:
ObjectOutputStream obs = null;
		try{
			obs = new ObjectOutputStream(new FileOutputStream("d://student.tmp"));
			stu student= null;
			student= new stu("2013081237", "張三", 25);
			obs.writeObject(student);
			obs.flush();
			
			student= new stu("2013081238", "李四", 26);
			obs.writeObject(student);
			obs.flush();
			
			student= new stu("2013081239", "王五", 27);
			obs.writeObject(student);
			obs.flush();
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				obs.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}

讀取時用readObject()方法到檔案末尾時不會反回-1之類的標識,這時遍歷方法可以用EOFException來解決檔案結束的問題。程式碼如下:
try{
    while(true){
    obj = ois.readObject();
    student= (stu)obj;
    System.out.println("姓名為:" + student.getName());
    System.out.println("性別為:" + student.getSex());
    System.out.println("年齡為:" + student.getAge());
    }
}catch(EOFException e){
 e.printStackTrace();
 System.out.println("結束");
}

通過丟擲的EOFException異常來判定檔案是否到末尾了。這樣就能實現對物件檔案的遍歷。

相關推薦

java物件寫入檔案

在用物件序列化寫入檔案後,特別是多物件的情況。比如說一個學生管理系統,有多個person,要想把所有的學生都資料都儲存在一個檔案中,可以有兩種方法: 一、把所有學生的資料都儲存在一個容器中,然後將這個容器一個物件寫入檔案,再用物件的反序列化從檔案中讀取出來就行了。(這裡就不

java一個物件的所有屬性

public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{    

# JavaObject的屬性和屬性值,並以String形式返回||toString()一個物件Object||將一個物件轉化為字串String

Java中遍歷Object的屬性和屬性值,並以String形式返回||toString()一個物件Object||將一個物件轉化為字串String 1.關注每個屬性組 //用List<Map<String, String>>

java的屬性

遍歷 value ttr row cati mode cep 數組 att public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException,

java Map的幾種方法

叠代器 ofo popu arr highlight shm int print number 方法分為兩類: 一類是基於map的Entry;map.entrySet(); 一類是基於map的key;map.keySet() 而每一類都有兩種遍歷方式: a.利用叠代器 it

Java實體類(處理MongoDB)

boot common ech set declare code mod exc reflect 在實際過程中,經常要將實體類進行封裝,尤其是處理數據庫的過程中;因此,對於遍歷實體類能夠與數據庫中的一行數據對應起來。 我是使用的環境是Spring boot,訪問的數據庫時M

JavaSet集合的方法

對 set 的遍歷 1.迭代遍歷: Set<String> set = new HashSet<String>(); Iterator<String> it = set.iterator(); while (it.hasNext()) {

JavaHashMap的5種方式

分類: JAVA 本教程將為你展示Java中HashMap的幾種典型遍歷方式。 如果你使用Java8,由於該版本JDK支援lambda表示式,可以採用第5種方式來遍歷。 如果你想使用泛型,可以參考方法3。如果你使用舊版JDK不支援泛型可以參考方法4。 1、 通過ForEac

Json物件或者集合,簡單的實現

後臺 從資料庫獲取的物件,或者集合,一一儲存在map中 function infoView(id,state){            $.ajax({ type: 'POS

淺談javaMap的幾種方法

java中的map遍歷有多種方法,從最早的Iterator,到java5支援的foreach,再到java8 Lambda,讓我們一起來看下具體的用法以及各自的優缺點 先初始化一個map public class TestMap { public static Map<Intege

vue 物件顯示的順序不對

一、情況說明:在wacth裡面生成了一個日期字串的的陣列(如下圖1),如果遍歷這個陣列生成一個以日期為key的Object,但是數組裡面的元素順序和Object的屬性的順序是不一樣的,並且在vue模板中遍歷這個Object並顯示key,得到的是陣列的元素順序(如下圖2)! 圖1 圖2

談談javaMap的幾種方法

java中的map遍歷有多種方法,從最早的Iterator,到java5支援的foreach,再到java8 Lambda。 讓我們一起來看下具體的用法以及各自的優缺點 先初始化一個map public class TestMap { public static

微信小程式---物件

最近在折騰微信小程式,遇到這麼一個情況:後端返回一個key-value的物件資料,需要遍歷物件的key-value,然後渲染到檢視中。就像下面這樣: { '2018-1-9':{ address: '....', name: '....' }, '2018-1

JavaMap的幾種方法總結

方法一 在for-each迴圈中使用entries來遍歷 這是最常見的並且在大多數情況下也是最可取的遍歷方式。在鍵值都需要時使用。 Map<Integer, Integer> map = new HashMap<Integer, Integer>

js物件的屬性和值

function allPrpos ( obj ) {   // 用來儲存所有的屬性名稱和值   var props = "" ;   // 開始遍歷   for ( var p in obj ){ // 方法   if ( typeof ( obj [ p ]) == "

java實體類屬性和型別,屬性值

[java] view plain copy print? publicstaticvoid testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentExcept

java Map集合的四種方法.

先附上參考文章 關於java中遍歷map具體哪四種方式,請看下文詳解吧。 方式一 這是最常見的並且在大多數情況下也是最可取的遍歷方式。在鍵值都需要時使用。 Map<Integer, Integer> map =new HashMap<Int

javascript物件的List集合

<script><c:forEach var="obj" items="${mulst} "> alert("${obj.屬性}"); </c:forEach> 

JavaMap的兩種方法:keySet和entrySet

//方法一 Set<String> set = map.keySet(); for (String s:set) { System.out.println(s+","+ma

java屬性欄位及值

轉自: http://bbs.csdn.net/topics/320176897 示例程式碼如下: package test; import java.lang.reflect.Field; interface IEntity{ } class Entity