2013-04-20 18 views
1

好的,我有一個我編寫的Web應用程序,我可以從我的源代碼包中包含的文件中讀取一個名爲「text」的新文件夾。我正在嘗試寫入相同的文件,但它不起作用。它從不寫入文件。這裏是我的兩個方法的代碼:從文件中讀取並寫入同一個文件的Java Web應用程序

public void fillItems() throws IOException{ 
    String path = "/OBrien_PROJ2/text/catalog.txt"; 
    BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(path))); 
    String text = null; 
    while ((text=br.readLine())!=null){ 
     String[] itemArray = text.split(","); 
     // you might want to check array size 
     items.add(new ItemBean (itemArray[0], itemArray[1], itemArray[2], itemArray[3], itemArray[4])); 

    } 

    br.close(); 
} 



public void createNewItem(String iD, String name, String description, String price, String quantity) throws IOException{ 
    String path = "/OBrien_PROJ2/text/catalog.txt"; 
    BufferedWriter bw = new BufferedWriter(new FileWriter(path)); 
    bw.write(iD + "," + name + "," + description + "," + price + "," + quantity); 
    items.add(new ItemBean (iD, name, description, price, quantity)); 
    bw.flush(); 
    bw.close(); 
} 

如果它的事項,我使用NetBeans

回答

2

使用getServletContext().getRealPath("/")得到一個Web應用程序

你最好使用此代碼,我已經寫了,現在

<%@page import="java.io.BufferedOutputStream"%> 
<%@page import="java.io.FileOutputStream"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>JSP Page</title> 
</head> 
<body> 
    <h1>Hello World!</h1> 
    <% 
     try{ 
     String file = getServletContext().getRealPath("/")+"text/test.txt"; 
     FileOutputStream fos = new FileOutputStream(file); 
     BufferedOutputStream bos = new BufferedOutputStream(fos); 

     bos.flush(); 
     bos.close(); 
     } 
     catch(Exception ex){ 
      ex.printStackTrace(); 
      } 
    %> 
</body> 

0

你讀的資源不是文件。這是一個由類加載器加載的資源。部署時,將從war文件中讀取該資源,甚至可以從該war文件中的jar文件讀取該資源。

永遠不要試圖動態地修改webapp的內容。即使有可能,這也是一個非常糟糕的想法,因爲重新部署webapp會刪除creted或修改後的文件。如果您必須寫入某處,請將數據寫入數據庫(最好),因爲它可以輕鬆地由多個Web應用程序實例共享,並在本地處理concurreny)或Web應用程序之外的文件。

順便說一句,FileWriter構造函數的參數是一個文件路徑。因此new FileWriter("/OBrien_PROJ2/text/catalog.txt")寫入文件系統上的文件/OBrien_PROJ2/text/catalog.txt(而不是在webapp中)。

+0

我沒有寫入數據庫的選項。沒有辦法寫入webapp中包含的文本文件? – ssgtob1 2013-04-20 20:17:20

+0

簡答題:不。你會發現一個.exe文件自己寫東西是合乎邏輯的嗎?戰爭文件一樣。 – 2013-04-20 20:18:43

0

首先您將創建兩個servlet的電流通路。這裏我創建了A和B servlet。

公共類A延伸的HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    try (PrintWriter out = response.getWriter()) { 

     InputStream input= this.getClass().getResourceAsStream("addressBook.txt"); 
     int x= input.read(); 
     while(x != -1){ 
      char c= (char) x; 
      out.print(c); 
      x= input.read();     
     } 
    } 
     catch(Exception ex){ 
       ex.printStackTrace(); 
     } 

     finally{ 
      out.close(); 
     } 
    } 
} 

這裏我寫這篇文字到addressBook.txt file.A的servlet閱讀文本文件。 B servlet寫入文本文件。

public class B extends HttpServlet { 

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    try (PrintWriter out = response.getWriter()) { 
     String name=request.getParameter("n"); 
     String mobile=request.getParameter("m"); 
     out.println(name+"<br>"); 
     out.println(mobile); 
     FileWriter fileWriter=new FileWriter("E:\\IJSE\\ABSD\\DAY 6\\Assignment 1\\src\\java\\adbook.txt",true); 
     PrintWriter printWriter=new PrintWriter(fileWriter,true); 
     if(name==null||mobile==null) { 
      } else { 
       printWriter.println("<tr><td>" + name + "</td><td>" + mobile + "</td></tr>"); 
       out.println("<body bgcolor=\"#1589FF\">\n" + 
       "<script language=\"javascript\">\n" + 
       "alert(\"Added successfull\");\n" + 
       "</script>\n" + 
       "<p></p>"); 

      } 
     printWriter.close(); 
    } 
} 
相關問題