|
|
|
|
|
package com.zky.pub;
|
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
import java.io.InputStream;
|
|
|
import java.io.InputStreamReader;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
|
import org.apache.commons.fileupload.DiskFileUpload;
|
|
|
import org.apache.commons.fileupload.FileItem;
|
|
|
import org.apache.log4j.Logger;
|
|
|
|
|
|
/**
|
|
|
* @author dy
|
|
|
*
|
|
|
*/
|
|
|
public class FileImport {
|
|
|
private Logger log = Logger.getLogger(FileImport.class);
|
|
|
|
|
|
private String[] column;
|
|
|
|
|
|
private String split = "\t";//默认以制表符(TAB键)间隔
|
|
|
|
|
|
public FileImport() {
|
|
|
column = new String[0];
|
|
|
}
|
|
|
|
|
|
public FileImport(String[] column) {
|
|
|
this.column = column;
|
|
|
}
|
|
|
|
|
|
public FileImport(String column) {
|
|
|
this.column = new String[] { column };
|
|
|
}
|
|
|
|
|
|
public FileImport(String[] column, String split) {
|
|
|
this.column = column;
|
|
|
this.split = split;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 将上传文件内容读入到一个List中 并将其他表单信息写入传入的Map中 key格式为form.xxx
|
|
|
* @param request
|
|
|
* @param p_otherParamList
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List importSingleFileAsList(HttpServletRequest request,
|
|
|
Map p_otherParamMap) throws Exception {
|
|
|
List result = new ArrayList();
|
|
|
String path = request.getRealPath("/temp/");
|
|
|
DiskFileUpload fu = new DiskFileUpload();
|
|
|
//设置允许用户上传文件大小,单位:字节
|
|
|
fu.setSizeMax(10000000);
|
|
|
//设置最多只允许在内存中存储的数据,单位:字节
|
|
|
fu.setSizeThreshold(4096);
|
|
|
//设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
|
|
|
fu.setRepositoryPath(path);
|
|
|
//得到所有的文件
|
|
|
List fileItems = fu.parseRequest(request);
|
|
|
Iterator i = fileItems.iterator();
|
|
|
while (i.hasNext()) {
|
|
|
FileItem fi = (FileItem) i.next();
|
|
|
//忽略其他不是文件域的所有表单信息
|
|
|
if (!fi.isFormField()) {
|
|
|
//获得文件名,这个文件名包括路径
|
|
|
String fileName = fi.getName();
|
|
|
log.debug("# upload file:" + fileName);
|
|
|
if (fileName != null) {
|
|
|
InputStream stream = fi.getInputStream();
|
|
|
BufferedReader in = new BufferedReader(
|
|
|
new InputStreamReader(stream));
|
|
|
String line = "";
|
|
|
while ((line = in.readLine()) != null) {
|
|
|
line = line.trim();
|
|
|
if (line.length() == 0) { //忽略空行
|
|
|
continue;
|
|
|
}
|
|
|
result.add(line);
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
if (p_otherParamMap != null) {
|
|
|
p_otherParamMap.put("form." + fi.getFieldName(), fi
|
|
|
.getString());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (result.size() == 0) {
|
|
|
result = null;
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
public HashFmlBuf importSingleFile(HttpServletRequest request)
|
|
|
throws Exception {
|
|
|
if (column == null || column.length == 0) {
|
|
|
return null;
|
|
|
}
|
|
|
HashFmlBuf buf = new HashFmlBuf();
|
|
|
String path = request.getRealPath("/temp/");
|
|
|
DiskFileUpload fu = new DiskFileUpload();
|
|
|
//设置允许用户上传文件大小,单位:字节
|
|
|
fu.setSizeMax(10000000);
|
|
|
//设置最多只允许在内存中存储的数据,单位:字节
|
|
|
fu.setSizeThreshold(4096);
|
|
|
//设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
|
|
|
fu.setRepositoryPath(path);
|
|
|
//得到所有的文件
|
|
|
List fileItems = fu.parseRequest(request);
|
|
|
Iterator i = fileItems.iterator();
|
|
|
//处理文件
|
|
|
while (i.hasNext()) {
|
|
|
FileItem fi = (FileItem) i.next();
|
|
|
//忽略其他不是文件域的所有表单信息
|
|
|
if (!fi.isFormField()) {
|
|
|
//获得文件名,这个文件名包括路径
|
|
|
String fileName = fi.getName();
|
|
|
log.debug("# upload file:" + fileName);
|
|
|
if (fileName != null) {
|
|
|
InputStream stream = fi.getInputStream();
|
|
|
|
|
|
BufferedReader in = new BufferedReader(
|
|
|
new InputStreamReader(stream));
|
|
|
String line = "";
|
|
|
String[] values = null;
|
|
|
int j = 0;
|
|
|
while ((line = in.readLine()) != null) {
|
|
|
line = line.trim();
|
|
|
if (line.length() == 0) { //忽略空行
|
|
|
continue;
|
|
|
}
|
|
|
if (column.length > 1) {
|
|
|
values = line.split(split);
|
|
|
for (int k = 0; k < values.length; k++) {
|
|
|
buf.fchg(column[k], j, values[k]);
|
|
|
}
|
|
|
} else {
|
|
|
buf.fchg(column[0], j, line);
|
|
|
}
|
|
|
j++;
|
|
|
}
|
|
|
buf.fchg("rowcount", 0, Integer.toString(j));
|
|
|
buf.setRowCount(j);
|
|
|
}
|
|
|
} else {
|
|
|
buf.fchg("form." + fi.getFieldName(), 0, fi.getString());
|
|
|
}
|
|
|
}
|
|
|
return buf;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param column The column to set.
|
|
|
*/
|
|
|
public void setColumn(String[] column) {
|
|
|
this.column = column;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param split The split to set.
|
|
|
*/
|
|
|
public void setSplit(String split) {
|
|
|
this.split = split;
|
|
|
}
|
|
|
|
|
|
}
|