2015-11-29 44 views
0

我收到流關閉錯誤。我正在嘗試將一個huffman樹寫入一個文本文件,但每次運行它時,都會彈出錯誤消息,指出該流已關閉。有任何想法嗎?流關閉錯誤Java

HuffmanTree Tree = new HuffmanTree(); 
    HuffmanTree.HuffData[] freqTable = null; 
    BufferedReader in = null; 
    ObjectOutputStream out = null; 
    try{ 
    in = new BufferedReader(new FileReader("oddysy.txt")); 

    freqTable = HuffmanTree.buildFreqTable(in); 
    Tree.buildTree(freqTable); 
    Tree.buildCodeTable(); 
    Tree.printCode(new PrintStream(new FileOutputStream("freqTable.txt"))); 

    Tree.encode(in, new ObjectOutputStream(new FileOutputStream("watsonStructure.txt"))); 
    } finally { 
     if (in != null){ 
      in.close(); 
     } 
     if (out != null){ 
      out.close(); 
     } 
    } 
} 
java.io.IOException: Stream closed 
at java.io.BufferedReader.ensureOpen(BufferedReader.java:122) 
at java.io.BufferedReader.read(BufferedReader.java:179) 
at HuffmanTree.encode(HuffmanTree.java:244) 
at Huffman_Driver.main(Huffman_Driver.java:28) 

回答

0

這裏的問題是,您使用的是已與閱讀做了讀者。

在以下代碼中,HuffmanTree使用緩衝閱讀器構建頻率表。

in = new BufferedReader(new FileReader("oddysy.txt")); 
freqTable = HuffmanTree.buildFreqTable(in); 

現在BufferedReader讀取文件中的所有數據並關閉流,因爲沒有要讀取的數據。

再次嘗試使用相同的BufferedReader,其中讀取器讀取文件中的所有數據並關閉流。因此你得到這個例外。

Tree.encode(in, new ObjectOutputStream(new FileOutputStream("watsonStructure.txt"))); 

如果您需要從同一文件中讀取數據,則必須重新初始化BufferedReader。

+0

對不起,還是有點困惑。所以我應該關閉流,然後重新初始化BufferedReader? @Erranda – waterboy21

+0

一旦你用BufferedReader完成了閱讀,你就不能重複使用它。如果您需要再次讀取該文件,只需初始化一個不同的BufferedReader。但要確保你在某個時候關閉了讀者。 – Eranda