<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>
The above is a simple form that lets the user enter a question before sending it.
<%@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>
This part takes the question entered and saves it to a text file and then opens the file to display whatever is inside.
All this is done through the following java code:
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, true);
// 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;
}
}
The part thats really confusing me is how would I edit this so that after a question is posted on the form, the date and time of the post is automatically added to the beginning of each question.
To do this I know I would first need to import the date utility in java and then put something like this on my form page:
<%!Date startTime = new Date();%>
Once I get to that part I start thinking to myself, how would I pass the information inside startTime onto my java file that handles the appending of the vector?
Something else I tried already was simply putting Date startTime = new Date(); into the java file and then using a simple code like writer.append(startTime); so that the date inside startTime is appended along with the question entered, however this didn’t work at all and just gave me a error. In the end this led me to believe that the best way to do this is to just use the scriplet:
<%!Date startTime = new Date();%>
How exactly would I pass the information held in startTime onto my java code so that it can be appended inside the same element of the vector that the question entered was saved to? Thanks for any help or advice.
EDIT: can someone also please explain why writer.append(startTime); doesn’t work? It seems like it should work perfectly fine… Hopefully understanding whats wrong will bring me a step closer to figuring this out
Just add it to
String[]before adding toVector<String[]>:If you need a different date format, look at
SimpleDateFormat.Unrelated to the concrete problem, perhaps you’re dealing with a decade old application, but do you realize that this code is full of obsolete APIs and poor practices?