我是一个jsp 初学者,现在公司要求用jsp编写一个程序,我不知该如何下手,需求如下:1.导入一个txt文本,此文本中含有一组含有重复号码的序列,处理后导出为不重复的号码序列txt文本,sql语句我会写,但编写为jsp的应用程序就有些困难。2.导入两个txt文本,取出两个文件的交集的反,即{1,2,3},{2}处理后导出为{1,3}.请指点一下,如果有范例最好,由于比较急所以问题有些唐突,请学长们谅解…,先谢谢了。我目前所能做到的程序如下:
1.TXT 文本导入界面 input.jsp:
<form method="POST" enctype="multipart/form-data" action="process.jsp">
<!--webbot bot="FileUpload" U-File="fpweb:///_private/form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
<p>选择TXT文件:<input type="file" name="Choose" size="30">
<input type="submit" value="提交" name="Submit"></p>
</form>
2.数据导入状态信息 process.jsp:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.io.DataInputStream"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="frame.Login" //Login 实现数据库连接功能。%>
<%@ page import="frame.UpBean" //UpBean 实现txt数据导入数据库功能。%>
<%@ include file="conn.jsp" //conn.jsp 提供数据库连接信息。%><%
request.setCharacterEncoding("GBK");
int flag = 1;
Login login = new Login(DBClass, jdbcURL, DBName, DBpw);//连接数据库
UpBean upload = new UpBean();//定义数据导入类对象。 String DBClass = getDBClass();//从 conn.jsp 调用返回数据库驱动程序名称字符串的函数
String jdbcURL = getJdbcUrl();//从 conn.jsp 调用返回数据库连接地址字符串的函数
String DBName = getDBUser();//同上返回用户名
String DBpw = getDBPassword();//同上返回密码 flag = upload.doUpload(request, DBClass, jdbcURL, DBName, DBpw);//调用数据导入函数,并返回导入结果标识号。
System.out.println("flag = " + flag);
switch (flag) {
case 0:
out.println("<script language='javascript'>");
out.println("alert('号码导入成功!')");
out.println("history.back()");
out.println("</script>");
break;
case -1:
out.println("<script language='javascript'>");
out.println("alert('只能上传TXT类型文件!')");
out.println("history.back()");
out.println("</script>");
break;
case -2:
out.println("<script language='javascript'>");
out.println("alert('文件上传失败2,请与管理员联系!')");
out.println("history.back()");
out.println("</script>");
break;
default:
break;
}
%>
3.UpBean.java实现txt数据导入数据库功能,代码如下:
package frame;import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;import javax.servlet.ServletRequest;public class UpBean { public int doUpload(ServletRequest request, String jdbcDriver,
String jdbcUrl, String dbUser, String dbPassword) {
int flag = 0;
String content_disposition; try {
InputStream in = request.getInputStream();
byte[] lineData; BufferedInputStream bis = new BufferedInputStream(in); System.out.println(new String(readStreamLine(bis), "ASCII")); content_disposition = new String(readStreamLine(bis), "ASCII");
System.out.println(content_disposition);
content_disposition = new String(readStreamLine(bis), "ASCII");
System.out.println(content_disposition);
if (content_disposition.indexOf("text/plain") <= 0) {
flag = -1; // 文件不是文本
return flag;
} System.out.println(new String(readStreamLine(bis), "ASCII")); // 开始正式读取文件数据
// 打开数据库连接,向数据库插入
Login login = null;
login = new Login(jdbcDriver, jdbcUrl, dbUser, dbPassword);
//login.executeSqlvoid("truncate table UT_GROUPSEND_MOBILE"); while (true) {
lineData = readStreamLine(bis);
if (lineData == null) {
System.out.println("结束");
break;
} else {
content_disposition = new String(lineData, "ASCII");
//System.out.println(content_disposition); if (content_disposition.indexOf("---------------") == 0){
break;
} if (content_disposition.indexOf("---------------") == -1
&& content_disposition.length() > 0
&& content_disposition
.indexOf("Content-Disposition") == -1) {
login
.executeSqlvoid("insert into UT_GROUPSEND_MOBILE (mobile) values (ltrim(rtrim('"
+ content_disposition + "')))");
}
}
}
login.close();
} catch (IOException e) {
flag = -2; // 文件导入出错
e.printStackTrace();
} return flag;
} private byte[] readStreamLine(BufferedInputStream in) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int b = in.read();
if (b == -1)
return null;
while (b != -1 && b != '\n') {
bos.write(b);
b = in.read();
}
return bos.toByteArray();
} public static void main(String arg[]) {
UpBean upload = new UpBean();
ServletRequest request = null;
// HttpServletResponse response = null;
// System.out.println("结果:" + request.getAttribute("mobile"));
// upload.doUpload(request, "", "", "", "");
}
}
4.数据处理与数据导出部分的代码我还不会写,上面的部分代码我也是查阅资料写出来的,由于在自学,所以还有些基础问题不太明白,我的机器环境为:Jdk1.5.0+Tomcat6.0+MSSQL2005,(java环境变量都已配置好)想问一下,在Tomcat 下的webapps目录中编写的.java文件,tomcat会自动编译它们吗?我是进行手动编译的,因为没发现有class生成;还有我看jpetstore等范例,不明白Web-Inf等文件是如何生成的,我用的开发工具是DreamWeaver 与 Jcreator,想问的问题太多了,jsp方面的书我也在看,可是迫于工作压力,没能够进行系统的学习,只能即学即用,请学长前辈们指教,谢谢了。
1.TXT 文本导入界面 input.jsp:
<form method="POST" enctype="multipart/form-data" action="process.jsp">
<!--webbot bot="FileUpload" U-File="fpweb:///_private/form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
<p>选择TXT文件:<input type="file" name="Choose" size="30">
<input type="submit" value="提交" name="Submit"></p>
</form>
2.数据导入状态信息 process.jsp:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.io.DataInputStream"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="frame.Login" //Login 实现数据库连接功能。%>
<%@ page import="frame.UpBean" //UpBean 实现txt数据导入数据库功能。%>
<%@ include file="conn.jsp" //conn.jsp 提供数据库连接信息。%><%
request.setCharacterEncoding("GBK");
int flag = 1;
Login login = new Login(DBClass, jdbcURL, DBName, DBpw);//连接数据库
UpBean upload = new UpBean();//定义数据导入类对象。 String DBClass = getDBClass();//从 conn.jsp 调用返回数据库驱动程序名称字符串的函数
String jdbcURL = getJdbcUrl();//从 conn.jsp 调用返回数据库连接地址字符串的函数
String DBName = getDBUser();//同上返回用户名
String DBpw = getDBPassword();//同上返回密码 flag = upload.doUpload(request, DBClass, jdbcURL, DBName, DBpw);//调用数据导入函数,并返回导入结果标识号。
System.out.println("flag = " + flag);
switch (flag) {
case 0:
out.println("<script language='javascript'>");
out.println("alert('号码导入成功!')");
out.println("history.back()");
out.println("</script>");
break;
case -1:
out.println("<script language='javascript'>");
out.println("alert('只能上传TXT类型文件!')");
out.println("history.back()");
out.println("</script>");
break;
case -2:
out.println("<script language='javascript'>");
out.println("alert('文件上传失败2,请与管理员联系!')");
out.println("history.back()");
out.println("</script>");
break;
default:
break;
}
%>
3.UpBean.java实现txt数据导入数据库功能,代码如下:
package frame;import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;import javax.servlet.ServletRequest;public class UpBean { public int doUpload(ServletRequest request, String jdbcDriver,
String jdbcUrl, String dbUser, String dbPassword) {
int flag = 0;
String content_disposition; try {
InputStream in = request.getInputStream();
byte[] lineData; BufferedInputStream bis = new BufferedInputStream(in); System.out.println(new String(readStreamLine(bis), "ASCII")); content_disposition = new String(readStreamLine(bis), "ASCII");
System.out.println(content_disposition);
content_disposition = new String(readStreamLine(bis), "ASCII");
System.out.println(content_disposition);
if (content_disposition.indexOf("text/plain") <= 0) {
flag = -1; // 文件不是文本
return flag;
} System.out.println(new String(readStreamLine(bis), "ASCII")); // 开始正式读取文件数据
// 打开数据库连接,向数据库插入
Login login = null;
login = new Login(jdbcDriver, jdbcUrl, dbUser, dbPassword);
//login.executeSqlvoid("truncate table UT_GROUPSEND_MOBILE"); while (true) {
lineData = readStreamLine(bis);
if (lineData == null) {
System.out.println("结束");
break;
} else {
content_disposition = new String(lineData, "ASCII");
//System.out.println(content_disposition); if (content_disposition.indexOf("---------------") == 0){
break;
} if (content_disposition.indexOf("---------------") == -1
&& content_disposition.length() > 0
&& content_disposition
.indexOf("Content-Disposition") == -1) {
login
.executeSqlvoid("insert into UT_GROUPSEND_MOBILE (mobile) values (ltrim(rtrim('"
+ content_disposition + "')))");
}
}
}
login.close();
} catch (IOException e) {
flag = -2; // 文件导入出错
e.printStackTrace();
} return flag;
} private byte[] readStreamLine(BufferedInputStream in) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int b = in.read();
if (b == -1)
return null;
while (b != -1 && b != '\n') {
bos.write(b);
b = in.read();
}
return bos.toByteArray();
} public static void main(String arg[]) {
UpBean upload = new UpBean();
ServletRequest request = null;
// HttpServletResponse response = null;
// System.out.println("结果:" + request.getAttribute("mobile"));
// upload.doUpload(request, "", "", "", "");
}
}
4.数据处理与数据导出部分的代码我还不会写,上面的部分代码我也是查阅资料写出来的,由于在自学,所以还有些基础问题不太明白,我的机器环境为:Jdk1.5.0+Tomcat6.0+MSSQL2005,(java环境变量都已配置好)想问一下,在Tomcat 下的webapps目录中编写的.java文件,tomcat会自动编译它们吗?我是进行手动编译的,因为没发现有class生成;还有我看jpetstore等范例,不明白Web-Inf等文件是如何生成的,我用的开发工具是DreamWeaver 与 Jcreator,想问的问题太多了,jsp方面的书我也在看,可是迫于工作压力,没能够进行系统的学习,只能即学即用,请学长前辈们指教,谢谢了。
解决方案 »
- fileupload上传问题
- Birt报表定时生成
- HTTP status 500错误,怎么解决?
- Java 中的 位运算( >> ) 和javascript中, 结果怎么不一样???
- 在tomcat里建立socket服务
- 请求帮助
- 上次发的问题,始终无人能够解决,可能是理解有误,这次我把简要代码贴上,希望有高手解答!
- dom解析的问题,急!!!
- 头痛的问题,我检查了一周了,还没找出问题所在,(关于程序中使用数组的问题)我就30分了,谁帮我解决了,我再攒50分给他
- Tomcat 的发布JSP 网页的 问题?
- 树状结构菜单怎么得到其叶节点,如何遍历呢?
- 活老好几十年了头次来(论坛杂做了,最好是把具体的步骤给作个视频挖)
1.看看jdk帮助文档!里边的String里的方法!有个String转换char数组的方法!
2.循环遍历你的数组!去重!
3.以字节为单位读取库数据并且输出!
一次读多少个字节
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
in.read(tempbytes)
只能想到这些了!(*^__^*) 嘻嘻……
然后,用双循环求交集,然后再求反----实际上比较简单的方式就是直接查找,1.txt的各个元素是否出现再2.txt中而已。
两个字符串数组(或list)的比较
最土的办法就是一个一个对比较然后将找到相同的字符串去掉最后结果就是都不同的字符串。。
更高级点的么可以考虑hash放到map或set中用已有的程序进行处理。。这种做法要对基本集合比较了解
自己选吧至于输出
output咯没啥悬念的网上到处有例子
每个文件中的数据分解到两个集合中,例如list1和list2。再利用apache commons collection中的ListUtils的subtract()方法,求上面的表达式的结果就是了。
list3 = ListUtils.subtract(list1, list2);
list4 = ListUtils.subtract(list2, list1);
resultList = list3.addAll(list4);
resultList就是你想要的结果,再写入txt就行了。
不说了,伤心!可怜我现在还失业.
装个myEclipse,
多看看别人写的代码
你公司其他人呢,把问题归纳一下,找个大牛一次问清楚
public class TextFilter { /**
* 获得唯一的数组
*/
public String[] getDistinct(String str) {
String[] strs = str.split(",");
Set set = new HashSet();
for (int i = 0; i < strs.length; i++) {
set.add(strs[i]);
} return (String[]) set.toArray(new String[set.size()]);
} /**
* 获得不同的数字
*/
public String[] getDifferent(String str1, String str2) {
String[] num1 = this.getDistinct(str1);
String[] num2 = this.getDistinct(str2);
Set set = new HashSet();
for (int i = 0; i < num1.length; i++) {
boolean hasDifferent=true;
for (int j = 0; j < num2.length; j++) {
if (num1[i].equals(num2[j])) {
hasDifferent=false;
break;
}
}
if(hasDifferent){
set.add(num1[i]);
}
}
return (String[]) set.toArray(new String[set.size()]);
} /**
* 打印字符传,测试用
*/
public static void print(String[] str) {
for (int i = 0; i < str.length; i++) {
System.out.print(str[i] + ",");
}
System.out.println();
} public static void main(String[] args) {
TextFilter textFilter = new TextFilter();
String a = "1,3,3,5,6,7,7";
System.out.println("---------------------取唯一,过滤前------------------");
System.out.println(a);
System.out.println("---------------------过滤后------------------");
print(textFilter.getDistinct(a)); String b="3,4,5,6,7,8";
System.out.println("---------------------取不同值,过滤前------------------");
System.out.println("字符串a:"+a);
System.out.println("字符串b:"+b);
System.out.println("---------------------过滤后------------------");
print(textFilter.getDifferent(a,b));
print(textFilter.getDifferent(b,a));
}
}