2013-05-28 31 views
2

我需要讀取文件的內容,使用API​​ Writer(PEMWriter)將它們寫入輸出流將內容的格式轉換爲所需的格式),然後從該輸出流中重新讀取新格式化的內容並存儲在String變量中。如何讀取文件內容,寫入輸出流和重新讀取並存儲在字符串變量存儲在java中

任何人都知道如何做到這一點?

在代碼字:

PEMWriter writer = null; 
Writer out = null; 
Reader in = null; 
String priv = null; 
KeyStore ks = null; 

    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 
     ks.load(new FileInputStream(MyConfig.KEYTOOL_FILE), 
       MyConfig.PASSWORD.toCharArray()); 
     KeyPair keyPair = getPrivateKey(ks, "myKey", 
       MyConfig.PASSWORD.toCharArray()); 
     PrivateKey privateKey = keyPair.getPrivate(); 

out = new BufferedWriter (new OutputStreamWriter(new org.apache.commons.io.output.ByteArrayOutputStream())); 
writer = new PEMWriter(out); 
writer.writeObject(privateKey); 
in = new BufferedReader (new org.apache.commons.io.input.NullReader(new Long(5000).longValue())); 

IOUtils.copy(in, out); 

priv = IOUtils.toString(in); 

上述代碼應工作,因爲它有一個書寫器(出)而它與使用充氣城堡API PEMWriter的內容填充。嘗試使用Reader(in)重新讀取out內容並將它們存儲到String(priv)時會發生問題。我得到一個IO異常,說明在文件結束後讀取。這發生在行IOUtils.copy(in, out);。 我很感謝這個問題的一些幫助。提前致謝。

+1

如果你得到一個異常,永遠不要忘記也張貼堆棧跟蹤。 – jlordo

+0

'new Long(5000).longValue()'?爲什麼不只是'5000L'?受虐狂? :-)另外,我不明白代碼如何與問題相關?您沒有涉及任何文件,並且您從NullReader讀取。 –

+0

@JBNizet - 我編輯了原始問題以包含先前遺漏的代碼 - 最初被忽略以避免不必要地混淆問題。 – user2144209

回答

1

您無法讀取流或讀取器兩次。一旦它被讀到最後它就在最後(在IOUtils.copy(in, out)完成)。然後你嘗試再讀一遍(IOUtils.toString(in))。

寫入兩根文件和字符串中的一個步驟中,您可以使用TeeWriter(如this one)和StringWriter的

或輸入複製到一個字符串和寫入字符串出來:

priv = IOUtils.toString(in); 
out.wite(priv); 
+0

謝謝,我明白了這一點。但我沒有得到的是,使用writeObject()如下所示的初始寫出是第一次出現所需內容的地方,所以它應該至少允許我使用IOUtils.copy()讀取一次。它不會拋出異常。 'out = new BufferedWriter(new OutputStreamWriter(new org.apache.commons.io.output.ByteArrayOutputStream())); writer = new PEMWriter(out); writer.writeObject(privateKey); in = new BufferedReader(new org.apache.commons.io.input.NullReader(new Long(5000).longValue())); IOUtils.copy(in,out);' – user2144209

-1

我相信我的解決方案的答案是使用管道 - 一個編寫器和讀取器管道將兩者連接在一起。這樣我就可以在閱讀器中閱讀我的輸出流。我只知道後,我嘗試了,但研究似乎最正確的答到我的問題 類似

PipedWriter pwriter = new PipedWriter(); 
    PipedReader preader = new PipedReader(pwriter); 
相關問題