2011-10-11 132 views
3

我需要弄清楚將JSF inpuText的內容寫入文件的方法。我想構建一個小UI,它將爲用戶提供以更簡單的方式(因此用戶界面)編寫一些數學公式的可能性,並能夠將它們保存爲.txt(或類似文件)文件。我一直在想,現在約8-10小時,我已經得到了最好的是:將JSF inputText的內容寫入文件

<h:inputText value="#{output.inputContent}" id="inputContent"></h:inputText> 

和bean:

import com.sun.faces.taglib.html_basic.InputTextTag; 
import java.awt.event.ActionListener; 
import java.io.FileOutputStream; 
import java.io.ObjectOutputStream; 
import java.util.ArrayList; 
import java.util.Map; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.faces.context.FacesContext; 
import javax.faces.context.ResponseWriter; 
import javax.servlet.http.HttpServletRequest; 


@ManagedBean(name = "output") 
@SessionScoped 
public class OutputHandler { 
    public String inputContent; 

    public String getinputContent() { 
     return inputContent; 
    } 

    public void setinputContent(String inputContent) { 
     this.inputContent = inputContent; 
    } 
    public void writeStream() 
    { 

     try{ 
      FileOutputStream fos=new FileOutputStream("outputOne.txt"); 
      ObjectOutputStream output=new ObjectOutputStream(fos); 

      output.writeObject(inputContent); 

     } 
     catch(Exception ex){ 
      System.out.println("Exception is: "+ex); 

     }  
    } 

} 

我敢肯定,大多數我所做的有錯了,所以任何幫助將不勝感激,即使它是一些處理類似問題的帖子的方向,所以我可以嘗試從那裏得到它。我不想被偷東西或什麼,問題是我從來沒有與JSF合作過(我昨天開始閱讀它),所以我說,甚至一些鏈接到一些文件,可以幫助我(我一直在使用谷歌搜索瘋狂,因爲我開始)或引導我一點將不勝感激。

+0

這是不是寫內容到文件?當問問題時,如果某些東西不起作用,說出什麼不起作用會很有幫助。如果它是一個web應用程序,並且該用戶不在服務器本地,則他們也需要下載該文件。 –

回答

2

With ObjectOutputStream你基本上是serializing a String對象到輸出。結果是而不是一個帶有字符串原始值的可讀文本文件。

您需要使用Writer,其中您將字符串的值傳遞給。

public void writeStream() throws IOException { 
    Writer writer = new FileWriter("outputOne.txt"); 

    try { 
     writer.write(inputContent); 
    } finally { 
     writer.close(); 
    } 
} 

這將最終在一個人類可讀的文本文件中的字符串的原始值。


無關的具體問題,請注意,文件IO使用相對路徑是一個非常糟糕的主意。你永遠不知道它會在哪裏結束,在某些環境下工作目錄也不可寫。始終明確指定一個絕對路徑,以現有的和可寫的文件夾:

Writer writer = new FileWriter("/path/to/outputOne.txt"); 

在服務器安裝,並從C:\磁盤執行的Windows環境中,上述路徑是基本相同C:\path\to\outputOne.txt。如有必要,可以將文件夾根目錄配置爲VM參數或配置文件設置。假設你通過-Doutput.location=/path/to VM參數,那麼你可以使用它如下:

File root = new File(System.getProperty("output.location")); 
    Writer writer = new FileWriter(new File(root, "outputOne.txt")); 
+0

謝謝你的回答,這正是我所尋找的。 – DVM