2012-02-14 47 views
1
<html>  
<head>   
<title>JSP Form</title>   
<style>    
</style>  
</head>  
<body>   

<form action="TestFileHandling.jsp" method="post">    
<fieldset>     
<legend>User Information</legend>     

<label for="question">Question</label> 
<input type="text" name="question" /> <br/> 

<input type="submit" value="submit"> 
</fieldset>   
</form>  

</body> 
</html> 

以上是讓用戶在發送之前輸入問題的簡單表單。使用JSP的反饋表格

<%@page import="myPackage.FileReaderWriter"%> 
<%@page import="java.util.Vector"%> 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01     
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 


<% 
Vector<String[]> v = new Vector<String[]>(); 
String[] str1 = {request.getParameter("question")}; 
v.addElement(str1); 


FileReaderWriter.saveVectorToFile(v, "MyTestFile.txt"); 
%> 



<% 

Vector<String[]> vec =   FileReaderWriter.readFileToVector  ("MyTestFile.txt"); 
for (int i = 0; i < vec.size(); i++) 
{ 
    out.print("|"); 
    for (int j = 0; j < vec.elementAt(i).length; j++) 
    { 
     out.print(vec.elementAt(i)[j] + "|"); 
    } 
%> 
<br> 
<% 
} 
%> 

</body> 
</html> 

這部分將輸入的問題保存到一個文本文件中,然後打開文件以顯示裏面的內容。

這一切是通過下面的Java代碼來完成:

package myPackage; 

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.Vector; 

public class FileReaderWriter { 
public static void saveVectorToFile(Vector<String[]> v, String sFileName) 
{ 
    try 
    { 
     // Create a new file writer 
     FileWriter writer = new FileWriter(sFileName); 

     // Loop through all the elements of the vector 
     for (int i = 0; i < v.size(); i++) 
     { 
      // Capture the index of the last item of each array 
      int lastIndex = v.elementAt(i).length - 1; 
      // Loop through all the items of the array, except 
      // the last one. 
      for (int j = 0; j < lastIndex; j++) 
      { 
       // Append the item to the file. 
       writer.append(v.elementAt(i)[j]); 
       // Append a comma after each item. 
       writer.append(','); 
      } 
      // Append the last item. 
      writer.append(v.elementAt(i)[lastIndex]); 
      // Append a new line character to the end of the line 
      // (i.e. Start new line) 
      writer.append('\n'); 
     } 
     // Save and close the file 
     writer.flush(); 
     writer.close(); 
    } 
    // Catch the exception if an Input/Output error occurs 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 

public static Vector<String[]> readFileToVector(String sFileName) 
{ 
    // Initialise the BufferedReader 
    BufferedReader br = null; 

    // Create a new Vector. The elements of this Vector are String arrays. 
    Vector<String[]> v = new Vector<String[]>(); 
    try 
    { 
     // Try to read the file into the buffer 
     br = new BufferedReader(new FileReader(sFileName)); 
     // Initialise a String to save the read line. 
     String line = null; 

     // Loop to read all the lines 
     while ((line = br.readLine()) != null) 
     { 
      // Convert the each line into an array of Strings using 
      // comma as a separator 
      String[] values = line.split(","); 

      // Add the String array into the Vector 
      v.addElement(values); 
     } 
    } 
    // Catch the exception if the file does not exist 
    catch (FileNotFoundException ex) 
    { 
     ex.printStackTrace(); 
    } 
    // Catch the exception if an Input/Output error occurs 
    catch (IOException ex) 
    { 
     ex.printStackTrace(); 
    } 
    // Close the buffer handler 
    finally 
    { 
     try 
     { 
      if (br != null) 
       br.close(); 
     } catch (IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
    // return the Vector 
    return v; 
} 


} 

我的問題是,雖然一切似乎是工作,每次我進入一個新的問題,舊的文本文件被覆蓋。有沒有一種方法可以解決這個問題,以便每次我在表單中輸入一個新問題時,它都會與所有其他問題一起添加到文本文件中,而不是不斷覆蓋文本文件?感謝您的任何信息或幫助。

+2

強制性:你真的不應該使用小腳本的。 – millimoose 2012-02-14 22:12:43

+0

+1關於scriptlets的評論,這是一個很好的鏈接http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files – reevesy 2012-02-14 22:21:16

回答

2

嘗試FileWriter writer = new FileWriter(sFileName,true);

+0

我討厭它的答案時簡單..哈哈,非常感謝大家。 – JimmyK 2012-02-14 22:23:17

2

您需要以追加模式打開文件。

FileWriter writer = new FileWriter(sFileName, true); 

這是關於FileWriter API的java文檔。

1

這應該足以打開文件進行追加 - 默認是重寫文件:

public static void saveVectorToFile(Vector<String[]> v, String sFileName) 
{ 
    // Create a new file writer 
    FileWriter writer = new FileWriter(sFileName, true); 
    // the rest of your code 
}