导入功能只能支持 .xls 后缀的文件...功能不够强大..嘿嘿
已经处理了数字后面有.0的问题 导入poi的包就可以使用了
下面是主要功能:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;
public class ImportAction {
private final int BUFFER_SIZE = 100;// 上传的字符流大小
private File file;
private String ext;
private String savePath;
private String fileFileName;
private float percent = 0;
private InputStream in = null;
private List<String> all;
private boolean copy(File src, File dst) {
float completedSize = 0;
float fileSize = 0;
try {
analytic(src);
in = new BufferedInputStream(new FileInputStream(src));
fileSize = in.available();
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
completedSize += (long) len;
percent = completedSize / fileSize * 100;
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
System.out.println(e);
}
}
}
return true;
}
public String sumPre() {
try {
PrintWriter out = ServletActionContext.getResponse().getWriter();
System.out.println(getFileFileName() + " filename");
String FileFileName2 = new String(getFileFileName().getBytes("utf-8"), "ISO8859-1");
out.print(percent + ":" + FileFileName2);
} catch (IOException e) {
System.out.println(e);
}
return null;
}
@SuppressWarnings("unchecked")
public void analytic(File is) {
try {
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(is));
HSSFSheet sheet = workbook.getSheetAt(0);
all = new ArrayList<String>();
for (int x = 0; x <= sheet.getLastRowNum(); x++) { //for循环获取所有数据
HSSFRow row = sheet.getRow(x);
Iterator cells = row.cellIterator();
while (cells.hasNext()) {
String value = "";
HSSFCell cell = (HSSFCell) cells.next();
switch (cell.getCellType()) { // 获取数据类型
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
value = String.valueOf((int) cell.getNumericCellValue());//处理数字
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
value = String.valueOf(cell.getStringCellValue()); // 字符串处理
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
value = String.valueOf(cell.getBooleanCellValue()); // bool类型处理
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
value = String.valueOf(cell.getCellFormula()); // 公式处理
break;
}
switch (((int) cell.getColumnIndex())) {//判断数据在哪列
case 0:
all.add("这是第1列的值 " + value);
break;
case 1:
all.add("这是第2列的值 " + value);
break;
case 2:
all.add("这是第3列的值 " + value);
break;
case 3:
all.add("这是第4列的值 " + value);
break;
}
}
}
} catch (Exception e) {
System.out.println(e);
}
}
public String upload() {
try {
File srcfile = this.getFile();// 依赖注入的方法取得文件域的对象
String uploadPath = ServletActionContext.getServletContext().getRealPath("upload");// 上传路径
ext = fileFileName.substring(fileFileName.lastIndexOf(".")).toLowerCase();// 取得后缀
File dstFile = new File(uploadPath, fileFileName);
copy(srcfile, dstFile);
} catch (Exception e) {
System.out.println(e);
}
return "success";
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getExt() {
return ext;
}
public String getSavePath() {
return savePath;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public void setExt(String ext) {
this.ext = ext;
}
public List<String> getAll() {
return all;
}
public void setAll(List<String> all) {
this.all = all;
}
}
下面是stuts配置文件:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.multipart.maxSize" value="61440000000"></constant>
<package name="fileUpload" namespace="/" extends="struts-default">
<action name="fileUpload" class="org.yzxdemo.Import.action.ImportAction"
method="upload">
<!-- 动态设置Action中的savePath属性的值 -->
<param name="savePath">/upload</param>
<result name="success">/filejd.jsp</result>
</action>
<action name="sumPre" class="org.yzxdemo.Import.action.ImportAction" method="sumPre">
</action>
</package>
</struts>
下面是页面代码 :
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<script type="text/javascript" src="js/jquery-1.6.2.min.js">
</script>
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
font-size: 14px;
}
-->
</style>
<script type="text/javascript">
parent.$("#filehid").attr("value", ""); //主要是用来做验证的
function aa() {
var val = $("input[name=file]").val();//获取输入框的值
var k = val.substring(val.lastIndexOf(".")).toLowerCase();//获取后缀名
if (k != ".xls") {
alert("请上传后缀名为xls的文件");
return false;
}
}
</script>
<body>
<br>
<table width="454">
<tr>
<td width="91" align="right">
文件路径:
</td>
<td width="351">
<form name='aform1' method='post' action="fileUpload.action"
enctype="multipart/form-data" οnsubmit="return aa();">
<input name='file' type='file' />
<input type="submit" value="上传" />
</form>
</td>
</tr>
</table>
</body>
</html>
filejd.jsp主要是用来输出导入的值:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
<table width="100%" height="21%">
<s:iterator value="all">
<tr height="20">
<td width="100%" valign="top"><s:property/></td>
</tr>
</s:iterator>
</table>
</body>
</html>