2013-10-28 60 views
-1

所以我想不出如何打印一個數組列表索引(第一個索引如此0)到一個文本文件。基本上,我有一個招聘類存儲5個變量打印arraylist到人類可讀形式的文本文件

public class Job { 

public int teamNo; 
    public String regNo; 
    public String gridRef; 
    public String gridCopy; 

    public String toString() { 

     return "Job [teamNo=" + teamNo + ", regNo=" + regNo + ", gridRef=" 
       + gridRef + ""; 

    } 

,然後我有型工作的ArrayList:

private static ArrayList<Job> teamNoOne = new ArrayList<Job>(); 

因此,所有被添加精細數據,打印出來等,但我可以不要將它保存到文本文件中。這是我的代碼,我只是得到它的隨機哈希代碼,但我需要它在人類可讀的形式。

try { 
        File file = new File("JOBS-DONE-LOG.txt"); 
        FileOutputStream fs = new FileOutputStream(file); 
        ObjectOutputStream os = new ObjectOutputStream(fs); 
        System.out.println(teamNoOne.get(0)); 

        os.writeObject(teamNoOne.get(0)); 
        os.close(); 


        } catch (IOException e1) { 
         e1.printStackTrace(); 
        } 

不知道該怎麼做。

回答

1

的writeObject對象序列化您的文件,但它不是以文本形式寫(http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html#writeObject(java.lang.Object)

你必須做,以另一種方式:例如,你可以使用的BufferedWriter類和寫入方法編寫你的toString()方法的輸出。

下面是一個完整的例子:

import java.io.File; 
import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.util.ArrayList; 

public class Job { 
    public String regNo; 
    public String gridRef; 
    public String gridCopy; 

    public String toString() { 

    return "Job [teamNo=" + teamNo + ", regNo=" + regNo + ", gridRef=" 
    + gridRef + ""; 

    } 

    public static void main(String[] args) throws Exception { 
    ArrayList<Job> teamNoOne = new ArrayList<Job>(); 
    // fill your array 
    Job job = new Job(); 
    job.regNo = "123"; 
    // continue to fill the jobs... 
    teamNoOne.add(job); 
    BufferedWriter writer = new BufferedWriter(new FileWriter("JOBS-DONE-LOG.txt")); 
    System.out.println(teamNoOne.get(0)); 
    writer.write(teamNoOne.get(0).toString()); 
    os.close(); 
    } 
} 
+0

啊,我想我明白了什麼你的意思是,所以如果我想獲得toString teamNoOne數組類似於 (作業s:teamNoOne){ //代碼打印teamNoOne的索引0? } – Javanoob33

+0

我已通過一個完整的示例更新了該帖子,爲您提供了一個主意。 –

+0

謝謝,我已經實現了它。它打印出來控制檯很好,但文本文件是空白的。它訪問它自上次訪問更改後,雖然 – Javanoob33

-2

這是因爲你沒有你的參數ArrayList。聲明您的列表時使用泛型:

ArrayList<Job> teamNoOne = new ArrayList<Job>(); 

因爲現在,雖然你已經重寫你的toString()方法,teamNoOne.get(0)使用一個ObjecttoString()

+0

對不起,我是新來的java和有點困惑,我應該如何去改變聲明?當我刪除由於依賴於它的其他方法而導致的私有靜態時,我收到了錯誤。 – Javanoob33

0

由於您試圖保存Job類型的數組列表,因此必須將其序列化(Refer this)。

public class Job implements java.io.Serializable 
    { 
    public int teamNo=0; 
    public String regNo="default"; 
    public String gridRef="default"; 
    public String gridCopy="default"; 

    public String toString() { 

    return "Job [teamNo=" + teamNo + ", regNo=" + regNo + ", gridRef=" 
      + gridRef + ""; 

    } 
    } 

保存文件

 try 
     { 
     FileOutputStream fileOut = new FileOutputStream(path); 
     ObjectOutputStream out = new ObjectOutputStream(fileOut); 
     out.writeObject(teamNoOne); 
     out.close(); 
     fileOut.close(); 
     } 
     catch(IOException i) 
     { 
      i.printStackTrace(); 
     } 

因此,你可以加載的ArrayList回來就好

 Object o = null; 
     try 
     { 
     FileInputStream fileIn = new FileInputStream(path); 
     ObjectInputStream in = new ObjectInputStream(fileIn); 
     o = in.readObject(); 
     in.close(); 
     fileIn.close(); 
     } 
     catch(IOException i) 
     { 
      i.printStackTrace(); 
     } 
     catch(ClassNotFoundException c) 
     { 
      c.printStackTrace(); 
     } 
     Arraylist<Job> loaded_Job = (ArrayList<Job>) o; 

然後打印ArrayList中

  for(int i = 0; i < loaded_Job.size(); i++) { 
      loaded_Job.get(i).toString(); 
      } 
+0

這仍然不起作用。我只能得到這個輸出: ¬ísrJob½u™=læE§我teamNoL gridCopyt Ljava/lang/String; L gridRefq〜L regNoq〜xp pat aat aa – Javanoob33

+0

你用什麼打印? –

+0

我正在使用ObjectOutputStream將其打印出來。應該是我正在使用別的東西? – Javanoob33