Java 需要txt文件中的数据(以逗号分隔),以使用现有类中的对象填充arraylist
我需要:Java 需要txt文件中的数据(以逗号分隔),以使用现有类中的对象填充arraylist,java,arrays,jsp,servlets,arraylist,Java,Arrays,Jsp,Servlets,Arraylist,我需要: 从文本文件中获取输入并逐行读取 将每行拆分为学生对象,并将这些值发送到arraylist 将对象的arraylist从Student类发送到我的servlet 将servlet中的arraylist发送到我的jsp页面 在html表格中显示值 这里是我的网页,为这个特殊的功能。我有许多不同的java页面、servlet和jsp页面参与到这个项目中,所以如果您需要这些页面中的任何内容,请询问 文本文件按以下顺序包含学生信息: 学生ID、姓氏、名字、测验分数1-5、化妆测验分数、, 期
- 从文本文件中获取输入并逐行读取
- 将每行拆分为学生对象,并将这些值发送到arraylist
- 将对象的arraylist从Student类发送到我的servlet
- 将servlet中的arraylist发送到我的jsp页面
- 在html表格中显示值
学生
信息:
学生ID、姓氏、名字、测验分数1-5、化妆测验分数、,
期中成绩、问题成绩和期末考试成绩
文本文件的格式示例如下所示:
1234,一些人,98.0,94.0,97.0,96.0,99.0,0.0,92.0,95.0,99.0
1235,另一个人,89.0,99.0,87.0,85.0,88.0,0.0,89.0,98.0,99.0
1236,再多一个人,89.0,98.0,89.0,98.0,97.0,0.0,79.0,89.0,99.0
然而,我在表中得到的输出只是第一行,它全部在第一个单元格中
如果你能给我指出正确的方向,我完全迷路了
这是我的学生
课堂页面:
public class Student {
private String sid,fnm,lnm,lgrade;
private double q1,q2,q3,q4,q5,qmkup,midt,probs,finex,qavg,cavg;
public Student (){
//empty constructor
sid="";
lnm="";
fnm="";
lgrade="";
q1= 0;
q2= 0;
q3= 0;
q4= 0;
q5= 0;
qmkup= 0;
midt= 0;
probs= 0;
finex= 0;
qavg= 0;
cavg= 0;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getFnm() {
return fnm;
}
public void setFnm(String fnm) {
this.fnm = fnm;
}
public String getLnm() {
return lnm;
}
public void setLnm(String lnm) {
this.lnm = lnm;
}
public String getLgrade() {
return lgrade;
}
public double getQ1() {
return q1;
}
public void setQ1(double q1) {
this.q1 = q1;
}
public double getQ2() {
return q2;
}
public void setQ2(double q2) {
this.q2 = q2;
}
public double getQ3() {
return q3;
}
public void setQ3(double q3) {
this.q3 = q3;
}
public double getQ4() {
return q4;
}
public void setQ4(double q4) {
this.q4 = q4;
}
public double getQ5() {
return q5;
}
public void setQ5(double q5) {
this.q5 = q5;
}
public double getQmkup() {
return qmkup;
}
public void setQmkup(double qmkup) {
this.qmkup = qmkup;
}
public double getMidt() {
return midt;
}
public void setMidt(double midt) {
this.midt = midt;
}
public double getProbs() {
return probs;
}
public void setProbs(double probs) {
this.probs = probs;
}
public double getFinex() {
return finex;
}
public void setFinex(double finex) {
this.finex = finex;
}
public double getQavg() {
calcStudent();
return qavg;
}
public double getCavg() {
return cavg;
}
private void calcStudent(){
double[] qs = { q1, q2, q3, q4, q5, qmkup};
Arrays.sort(qs);
qavg = (qs[2] + qs[3] + qs [4] + qs[5]) / 4.0;
if (qavg >= 89.5 && midt >= 89.5 && probs >= 89.5){
cavg = (qavg+midt+probs) / 3.0;
lgrade = "A";
}else{
cavg = (qavg * .5) + (midt * .15) + (probs * .1) + (finex * .25);
if (cavg >= 89.5){
lgrade = "A";
}else if (cavg >= 79.5){
lgrade = "B";
}else if (cavg >= 69.5){
lgrade = "C";
}else if (cavg >= 59.5){
lgrade = "D";
}else{
lgrade = "F";
}
}
}
@Override
public String toString(){
String s = sid + "," + lnm + "," + fnm + "," +
q1 + "," + q2 + "," + q3 + "," + q4 + "," + q5 + "," +
qmkup + "," + midt + "," + probs + "," + finex;
return s;
}
这是我的java页面:
public class StudentIO {
public static void addStudent(Student s, String path)
throws IOException{
File f = new File(path);
PrintWriter out = new PrintWriter(new FileWriter(f,true));
out.println(s.toString());
out.close();
}
public static ArrayList<Student> getStudentList(String path)
throws IOException {
BufferedReader in = new BufferedReader
(new FileReader(path));
ArrayList<Student> sList = new ArrayList<Student>();
String line = in.readLine();
String data[];
while (line != null){
data = line.split(",");
Student s = new Student();
s.setSid(data[0]);
s.setLnm(data[1]);
s.setFnm(data[2]);
s.setQ1(Double.parseDouble(data[3]));
s.setQ2(Double.parseDouble(data[4]));
s.setQ3(Double.parseDouble(data[5]));
s.setQ4(Double.parseDouble(data[6]));
s.setQ5(Double.parseDouble(data[7]));
s.setQmkup(Double.parseDouble(data[8]));
s.setMidt(Double.parseDouble(data[9]));
s.setProbs(Double.parseDouble(data[10]));
s.setFinex(Double.parseDouble(data[11]));
s.getSid();
s.getLnm();
s.getFnm();
s.getQ1();
s.getQ2();
s.getQ3();
s.getQ4();
s.getQ5();
s.getQmkup();
s.getMidt();
s.getProbs();
s.getFinex();
sList.addAll(Arrays.asList(s));
line = in.readLine();
}
in.close();
return sList;
}
公共班级学生{
公共静态void addStudent(学生,字符串路径)
抛出IOException{
文件f=新文件(路径);
PrintWriter out=新的PrintWriter(新的FileWriter(f,true));
out.println(s.toString());
out.close();
}
公共静态ArrayList getStudentList(字符串路径)
抛出IOException{
BufferedReader in=新的BufferedReader
(新文件读取器(路径));
ArrayList sList=新的ArrayList();
String line=in.readLine();
字符串数据[];
while(行!=null){
数据=行分割(“,”);
学生s=新学生();
s、 设置ID(数据[0]);
s、 setLnm(数据[1]);
s、 setFnm(数据[2]);
s、 setQ1(Double.parseDouble(数据[3]);
s、 setQ2(Double.parseDouble(数据[4]);
s、 setQ3(Double.parseDouble(数据[5]);
s、 setQ4(Double.parseDouble(数据[6]);
s、 setQ5(Double.parseDouble(数据[7]);
s、 setQmkup(Double.parseDouble(数据[8]);
s、 setMidt(Double.parseDouble(数据[9]);
s、 setProbs(Double.parseDouble(数据[10]);
s、 setFinex(Double.parseDouble(数据[11]);
s、 getSid();
s、 getLnm();
s、 getFnm();
s、 getQ1();
s、 getQ2();
s、 getQ3();
s、 getQ4();
s、 getQ5();
s、 getQmkup();
s、 getMidt();
s、 getProbs();
s、 getFinex();
sList.addAll(Arrays.asList);
line=in.readLine();
}
in.close();
回程滑脱;
}
这是我的servlet:
public class ClassListServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String emsg = "";
String path;
String URL = "/ClassList.jsp";
ArrayList<Student> stulist;
try{
path = getServletContext().getRealPath("/WEB-INF/classlist.txt");
stulist = StudentIO.getStudentList(path);
request.setAttribute("stulist", stulist);
}catch (Exception e){
emsg = "Process error: " +e.getMessage();
URL = "/students.jsp";
}
RequestDispatcher disp = getServletContext().getRequestDispatcher(URL);
disp.forward(request, response);
}
公共类ClassListServlet扩展了HttpServlet{
受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
字符串emsg=“”;
字符串路径;
字符串URL=“/ClassList.jsp”;
ArrayList stulist;
试一试{
path=getServletContext().getRealPath(“/WEB-INF/classlist.txt”);
stulist=StudentIO.getStudentList(路径);
setAttribute(“stulist”,stulist);
}捕获(例外e){
emsg=“过程错误:”+e.getMessage();
URL=“/students.jsp”;
}
RequestDispatcher disp=getServletContext().getRequestDispatcher(URL);
显示转发(请求、响应);
}
这是JSP页面:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Class List</title>
</head>
<body>
<h1>Students on file:</h1>
<table>
<tr>
<th colspan="12"><br>Class List</th>
</tr>
<tr>
<th colspan="1">Student ID</th>
<th colspan="1">Last Name</th>
<th colspan="1">First Name</th>
<th colspan="1">Quiz 1</th>
<th colspan="1">Quiz 2</th>
<th colspan="1">Quiz 3</th>
<th colspan="1">Quiz 4</th>
<th colspan="1">Quiz 5</th>
<th colspan="1">Make-Up Quiz</th>
<th colspan="1">Midterm</th>
<th colspan="1">Problems</th>
<th colspan="1">Final</th>
</tr>
<%
ArrayList<Student> studt = (ArrayList<Student>)
request.getAttribute("stulist");
for (int i = 0; i < studt.size(); i++) {
%>
<tr>
<td><%= studt.get(i) %></td>
</tr>
<% } %>
</table>
<%
//cells and titles for each output field
//every time through loop will process each individual
//student object instead of string objects
%>
</body>
班级名单
在册学生:
班级名单
学生证
姓
名字
小测验1
小测验2
小测验3
小测验4
小测验5
补考
期中考试
问题
最终的
问题在于
getStudentList()
方法,您不需要每次都创建一个新的ArrayList
sList = new ArrayList<Student>();
sList=newarraylist();
当您在
getStudentList()
只需从该方法中删除此行
sList=new ArrayList();
在StudentIO.java中填充sList时,sList是否包含文件中的所有行?尝试将while loop更改为:
while ( ( line = in.readLine( ) ) != null ) {
此外,您正在将学生对象转换为字符串,然后将其发送到JSP。请传递完整的列表对象,然后将其打印出来。此外,您还需要colspan属性:
<tr>
<td><%= studt.get(i) %></td>
</tr>
是的,它返回文件的所有行,但不是将它们放在每个单元格中,而是将其作为字符串返回,就像从文本文件中读取的字符串一样。我不确定我是否理解如何从java页面在servlet和jsp页面中保留我的对象,以便我可以返回单元格中的每个对象,而不是整个字符串.正如上面Sanjeev和Luis所回答的,您的sList对象不包含所有学生对象。如何使其包含所有学生对象?我已经删除了额外的sList=new ArrayList();实例,但我仍然返回分隔字符串,而不是单个学生对象。您正在sList中添加学生对象,并通过Servlet传递给JSP。但是在JSP上,您只需执行studt.get(I),它将调用student.toString()方法。相反,在JSP中,您应该执行如下操作:…==对不起,stackoverflow.com注释不允许使用格式化代码。确定,因此额外的实例不存在。我仍然只输出每行上每个学生对象数组的整个字符串。我不知道如何使用