2015-02-10 15 views
0

我有一個Servlet,其中InputStream是以XML格式獲取我的表單數據。我能夠以XML格式檢索表單數據並能夠在文件中寫入相同的數據。如果我打開文件,我可以看到我的表單數據。java中的字符串緩衝區問題

現在的問題是,當我嘗試追加表單數據到字符串緩衝區它不會發生。我試過buffer.append()。在該方法之後當我嘗試打印字符串緩衝區值時,控制檯中沒有顯示/打印任何內容。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
       // TODO Auto-generated method stub 
       response.setContentType("html/text"); 
      PrintWriter out = response.getWriter(); 
      out.println("doPost Method is excecuting"); 
      DataInputStream in = new DataInputStream (request.getInputStream()); 
      StringBuffer buffer = new StringBuffer(); 
      File file = new File("reqOutput.txt"); 
      file.createNewFile(); 
      FileWriter writer = new FileWriter(file); 
      int value; 
      while ((value=in.read()) != -1) { 
          buffer.append(value); 
         writer.write(value); 
         } 
      System.out.println("Value is : "+ buffer.toString()); // Nothing is printing 
      writer.flush(); 
      writer.close(); 
} 

我的代碼有什麼問題,請提出任何建議。

+1

while循環不會被執行。 StringBuffer沒有問題 – 2015-02-10 09:49:14

+1

使用StringBuilder代替StringBuffer。 – 2015-02-10 09:50:00

+0

是你的'in.read()'返回正確的值嗎? – Vihar 2015-02-10 09:50:53

回答

3

下面是修改你的代碼從文件中讀取:

public static void main(final String[] args) throws Exception { 
     BufferedReader in = null; 
     try { 
      in = new BufferedReader(new FileReader("test")); 
      final StringBuilder sb = new StringBuilder(); 
      String line; 
      while ((line = in.readLine()) != null) { 
       sb.append(line); 
      } 
      System.out.println("Value is : " + sb.toString()); 
     } finally { 
      if (in != null) { 
       in.close(); 
      } 
     } 
    } 

我添加了周圍的FileReader一個BufferedReader優化閱讀。 我從一次讀取一個字符切換到逐行讀取。 這也給你的結果作爲字符串,所以你不必轉換int。

此外,我添加了資源處理(pre-7風格,沒有異常處理)並切換到StringBuilder。

輸出:

世界,你好! - >價值是:hello world!

我覺得還有另外一個問題,不在你的代碼的這一部分。

您的代碼的補充意見(不涉及這個問題):

的StringBuffer是線程安全的實現。如果你不需要這個(比如在你的servlet示例中),最好使用StringBuilder。

不要關閉代碼塊中的資源,使用try-finally(或自從Java 7 try-with-resources)來保證資源始終關閉,即使在塊中某處出現異常時也是如此。

+0

是否有機會獲取字符串格式的值而不是整數值? – Vinod 2015-02-10 10:13:28

+0

在StringBuffer上使用StringBuilder在這裏不會解決任何問題。我知道這樣做會有非常小的速度增長(這將遠遠超過Web服務和文件操作的久坐速度),但這與這個問題無關。我向你投票,因爲你的主要觀點(「問題在別處」)是合理的。 – 2015-02-10 11:15:29

+0

這是無關緊要的,但仍然是很好的做法。另請參閱我剛剛添加的有關資源的評論。 – 2015-02-10 11:16:52