通過文字文件實現資訊的大量匯入

來源:互聯網
上載者:User
最近參與了一個網上直報項目的維護工作,該網上直報應用程式有一個功能就是通過匯入文字文件的方式向後台資料庫中大量匯入直報使用者,包括使用者各項資訊如單位名稱、企業資質等級等等。其核心之處就是如何擷取所上傳文字文件中的內容,現將該部分程式簡單介紹如下:

        首先是背景javabean程式如下所示:

package Util;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.util.LinkedList;
import java.io.*;

public class ReadRequest{
 public LinkedList getRequest(HttpServletRequest request){
  LinkedList output=new LinkedList();
  try{
      ServletInputStream in=request.getInputStream();
      int len=request.getContentLength();
      System.out.println (len);
      byte []b=new byte[len];
      in.read(b,0,len);
      String str=new String(b);
      System.out.println (str);
      BufferedReader con=new BufferedReader(new StringReader(str));
      String c="";
      while((c=con.readLine())!=null){
       output.add(c);
                                  }
         }
     catch(Exception e){e.printStackTrace();}
     return output;
                                                    }
                }

        然後是寫相應的jsp測試頁面,此頁面沒有經過美工處理,僅為測試之用:)。

        index.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="pn" scope="page" class="Util.ReadRequest"/>
<%--<jsp:useBean id="pn" scope="request" class="Util.GetFile"/>--%>
<%@ page import="java.util.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>測試</title>
</head>

<body>
<form name="form1" action="index.jsp" method="post" enctype="multipart/form-data">
 <input name="sdf" type="file"><input name="aa" type="submit" value="提交">
 
 <%
LinkedList output=new LinkedList();
output=pn.getRequest(request);
//output=pn.readHttpData(request);
System.out.println(output.size());
for(int i=0;i<output.size();i++){
    out.println(output.get(i)+"<br>");
                                                   }
 %>
</form>
</body>
</html>

        這樣就會輸出文檔中的內容來了,當然還有一些其他的內容,可根據實際需要對內容進行處理。需要注意的是,在該網上直報程式中,文檔的格式是有要求的,每行為一個公司的基本資料,各個屬性之間用“,”隔開(也可以是其他的符號如“@”),並且各個屬性出現的順序也是固定的(如必須第一項是法人代碼,第二項是公司名稱)。得到了文檔中的內容後,就可以用一個迴圈批量的插入使用者資訊了。比如說,我上傳的文字文件內容如下所示:

        300000000,武漢,420101,230,A304,A211,4700
        300000001,武漢,420101,230,A304,A211,4700
        300000002,武漢,420101,230,A304,A211,4700
        300000003,武漢,420101,230,A304,A211,4700
首先對output進行處理,把前面的http頭內容如:Content-Disposition: form-data; name="sdf"; filename="C:/Documents and Settings/yy/案頭/test_jz.txt"以及尾remove掉,現在的output就只有文檔中的內容了。然後就開始插入資料庫(只給出代碼片斷):

//以下代碼僅適合本人的例子,具體情況具體而定

for(int i=0;i<output.size();i++){
 if (output.get(i) == null || ( (String) output.get(i)).equals("")) {
          continue; //空行則自動換行        }
 String s = (String) output.get(i); //取得一行 String[] ss = s.split(",");
 String sql="insert into xt_user(f001,f002,f003,f004,f005,f006) values(?,?,?,?,?,?)";
 PreparedStatement ps=con.prepareStatement(sql);
 ps.setString(1,ss[0]);
 ps.setString(2,ss[1]);
 ps.setString(3,ss[2]);
 ps.setString(4,ss[3]);
 ps.setString(5,ss[4]);
 ps.setString(6,ss[5]);
 ps.executeUpdate();
                             }

       

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.