我是一个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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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.   

    ....给你一个想法!
    1.看看jdk帮助文档!里边的String里的方法!有个String转换char数组的方法!
    2.循环遍历你的数组!去重!
    3.以字节为单位读取库数据并且输出!
     一次读多少个字节
        byte[] tempbytes = new byte[100];
        int byteread = 0;
        in = new FileInputStream(fileName);
       in.read(tempbytes)
    只能想到这些了!(*^__^*) 嘻嘻……
       
      

  2.   

    先用split方法将他们搞成数组,然后用双循环,进行排重。
    然后,用双循环求交集,然后再求反----实际上比较简单的方式就是直接查找,1.txt的各个元素是否出现再2.txt中而已。
      

  3.   

    这个题目其实是在考
    两个字符串数组(或list)的比较
    最土的办法就是一个一个对比较然后将找到相同的字符串去掉最后结果就是都不同的字符串。。

    更高级点的么可以考虑hash放到map或set中用已有的程序进行处理。。这种做法要对基本集合比较了解

    自己选吧至于输出
    output咯没啥悬念的网上到处有例子
      

  4.   

    其实就是两个集合的运算吗,(a - b) U (b - a),是算法问题啊。
    每个文件中的数据分解到两个集合中,例如list1和list2。再利用apache commons collection中的ListUtils的subtract()方法,求上面的表达式的结果就是了。
    list3 = ListUtils.subtract(list1, list2);
    list4 = ListUtils.subtract(list2, list1);
    resultList = list3.addAll(list4);
    resultList就是你想要的结果,再写入txt就行了。
      

  5.   

    哎,看看的你写代码...
    不说了,伤心!可怜我现在还失业.
    装个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));
    }
    }
      

  6.   

    各位学长,真的很抱歉!因为一些事情耽搁了跟大家在论坛讨论问题,呵呵……谢谢大家的帮助,我不会忘记的,看来观点趋近一致,我决定依照学长们的指点来解决问题,谢谢bobskay给我提供范例代码,收藏了,哈哈!现在结贴,希望以后能和大家继续讨论问题,再次感谢大家的帮助!