2016-01-13 143 views
-1

我有一個帶有序列化對象的文本文件。該文件包含這樣的數據 -從文本文件中讀取對象

line[com.high.3449%] 
line[com.high.58850?] 
line[com.high.47646%] 

我想讀取此內容,並在1列表中存儲1。但是當我讀到它時,我只能讀到line[com.high.3449%]的第一行,但不是全部。我使用下面的邏輯來讀 -

List<MyData> myobjects1 = new ArrayList<MyData>(); 
List<MyData> myobjects2 = new ArrayList<MyData>(); 
FileInputStream fin = new FileInputStream("/storage/200B-431F/Documents/MyData.txt"); 
ois = new ObjectInputStream(fin); 
try { 
    myobjects1 = (List<MyData>) ois.readObject(); 
    while (myobjects1 != null) { 
     myobjects2.addAll(myobjects1); 
     Log.d("hi", "second arraylist " + myobjects2); 
    } 
} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

try { 
    ois.close(); 
    server.sendData(myobjects2); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch(Exception e) {} 

有人可以幫助我如何讀取ArrayList中myobjects2所有的數據和存儲?

+0

對不起,但我不認爲你將能夠從文本文件中獲得反序列化的數據。 'line [com.high.3449%]'這不過是一個簡單的文字而已。 – rahul

+0

這就是我需要的。我只是得到第一行,但沒有休息。我想遍歷我的文件,並得到所有的數據 – FAZ

+0

你的意思是你想有這樣的列表? :line [com.high.3449%] line [com.high.58850?] line [com.high.47646%] – rahul

回答

0

試試這個:

 FileInputStream fis = null; 
       BufferedReader reader = null; 

       try { 
        fis = new FileInputStream("/storage/200B-431F/Documents/MyData.txt/CPU.txt"); 
        reader = new BufferedReader(new InputStreamReader(fis)); 

        System.out.println("Reading File line by line using BufferedReader"); 

        String line = reader.readLine(); 
        while(line != null){ 
         System.out.println(line); 
         line = reader.readLine(); 
         // here line variable will hold the data for each line of your text file 
         // i.e you can add the string to the arrayList here 
          myObjects2.add(line); 
        }   

       } catch (FileNotFoundException ex) { 
          } 
       catch (IOException ex) { 

       } 
+0

行是字符串,我怎樣才能將字符串添加到arraylist這不是字符串arraylist – FAZ

+0

哦,那就是我說,從文本文件讀取的行將是字符串類型,而不是MyData類型對象。 – rahul

+0

您可以從該字符串中創建InputStream,並從中創建ObjectInputStream ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(line.getBytes()));' –

1

這個問題似乎涉及到你的循環,當你讀回數據。有沒有需要循環(它會永遠循環下去)

而不是

myobjects1 = (List<MyData>) ois.readObject(); 
while (myobjects1 != null) { 
    myobjects2.addAll(myobjects1); 
    ... 

如果你想循環您應該使用

myobjects1 = (List<MyData>) ois.readObject(); 
if (myobjects1 != null) { 
    myobjects2.addAll(myobjects1); 
} 

通過你需要使用類似

的myobjects
for (MyData myData : myobjects1) { 
    myobjects2.add(myData); 
} 

我正在添加我用來測試答案的代碼。

package test; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 

import org.junit.Test; 

public class LoadFileObject { 

    public static class MyData implements Serializable { 
     private String line, content; 

     public MyData(String line, String content) { 
      setLine(line); 
      setContent(content); 
     } 
     public String getLine() { 
      return line; 
     } 
     public void setLine(String line) { 
      this.line = line; 
     } 
     public String getContent() { 
      return content; 
     } 
     public void setContent(String content) { 
      this.content= content; 
     } 
     public String toString() { 
      return (line+content); 
     } 
    } 

    @Test 
    public void doWork() throws Exception { 
     List<MyData> myobjects1 = new ArrayList<MyData>(); 
     myobjects1.add(new MyData("l1", "content1")); 
     myobjects1.add(new MyData("l2", "content2")); 

     ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("mydata.txt")); 
     oos.writeObject(myobjects1); 
     oos.close(); 

     List<MyData> myobjects2 = new ArrayList<MyData>(); 
     ObjectInputStream ois = new ObjectInputStream(new FileInputStream("mydata.txt")); 
     myobjects2 = (List<MyData>) ois.readObject(); 
     System.out.println("read:" + myobjects2.size()); 
     for (MyData myData : myobjects2) { 
      System.out.println("myData line:" + myData.getLine() + " content:" + myData.getContent()); 
     } 

    } 

} 
+0

這是同樣的問題。它只是讀取文件的第一行 – FAZ

+0

您的數據寫入方式或您的MyData對象可能存在一些問題。我將附上顯示代碼正常工作的測試用例。 –

+0

我能夠在寫入日誌時看到日誌,並且它是我上面粘貼的日誌 – FAZ