- 浏览: 26474 次
- 性别:
- 来自: 杭州
最新评论
-
jzyangbb:
解决了吗? 我也配到过
jxl读取一个7M的Excel文件内存益出,网上找遍也找不到解决方案 -
hotboy10001000:
建议不要用jxl进行读取,最好用jacob,直接调用本地Exc ...
jxl读取一个7M的Excel文件内存益出,网上找遍也找不到解决方案 -
kingkongguo:
真的想知道如何解决,系统超过二百多行数据,读取就会放慢卡死系统 ...
jxl读取一个7M的Excel文件内存益出,网上找遍也找不到解决方案 -
caowuhui:
yes,的确如此,另外它好像对成员变量的类型为java.uti ...
让你的DBUtils支持enum -
jwinder:
tcl1122 写道楼主 两年过去了 这问题解决了吗?小弟我又 ...
jxl读取一个7M的Excel文件内存益出,网上找遍也找不到解决方案
最近在写一个导入上传系统,发现smartupload他只有上传一些小的文件,一但大的文件就反应很慢,上传速度也很慢,后来又在网上找了,commons-fileupload这个上传文件,看了不少人写的代码,那我总结了一下,试着写了一个,如哪里不好,请朋友们给我指出来。
代码如下:
上传这后文件就需要解压,解压时老是报错,后来发现是中文问题,网上找了很多的解决方法,感觉还是有点麻烦,由于在赶进度就没有解决中文问题,但以后有空的话,我就会去研究一下,试着解决这个问题。
代码如下:
解压后,要把解压的数据展现给B端看,并且分析解压的数据,进行业务处理,这里处理业务这一块就不贴出来了,但这些数据分析需要时时更新给B端,显示进度,唉,真烦啊,等数据分析完成并再把相应的文件进行拷贝,删除上传的压缩包等等。最后再给一个处理结果,其实在这里最难的还是处理进度的显示。唉,老要命啊!
下面是文件操作类,拷贝,删除等。
代码如下:
好了任务完成。
代码如下:
import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.DiskFileUpload; import org.apache.commons.fileupload.FileItem; /** * commons-fileupload 文件上传,同时可以上传多个文件<br /> * <li>使用:FileUpload.getInstance.getUploadFile(HttpServletRequest request);</li> * * @author HuangFeng * */ public class FileUpload { private static FileUpload fileupload = null; private FileUpload() { } /** * 获得上传文件实例 * * @return 实例 */ public static FileUpload getInstance() { if (null == fileupload) { return new FileUpload(); } else { return fileupload; } } /** 上传目录 */ private String uploadDir = "/uploadMdb/file/"; /** 上传文件最大限制 */ private long fileMaxSize = 100 * 1024 * 1024; /** 文件磁盘存在真实目录 */ private String fileRealPath = ""; /** 文件列表 */ private List<String> fileList = new ArrayList<String>(); /** * 上传文件 * @param request */ public boolean getUploadFile(HttpServletRequest request) { try { DiskFileUpload fu = new DiskFileUpload(); // 设置允许用户上传文件大小,单位:字节 fu.setSizeMax(fileMaxSize); // 设置最多只允许在内存中存储的数据,单位:字节 fu.setSizeThreshold(4096); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 fu.setRepositoryPath("/temp"); // 开始读取上传信息 List fileItems = fu.parseRequest(request); // 依次处理每个上传的文件 Iterator iter = fileItems.iterator(); // 创建文件目录 // 不管目录是否存在 String filepath = request.getSession().getServletContext().getRealPath(uploadDir); FileUtil.getInstance().createFolder(filepath); fileRealPath = filepath; while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); // 忽略其他不是文件域的所有表单信息 if (!item.isFormField()) { String name = item.getName(); long size = item.getSize(); if ((name == null || name.equals("")) && size == 0) { continue; } // 注意item.getName() // 会返回上载文件在客户端的完整路径名称,这似乎是一个BUG。 // 为解决这个问题,这里使用了fullFile.getName()。 name = name.replace('\\', '/'); File fullFile = new File(name); File savedFile = new File(filepath, fullFile.getName()); fileList.add(fullFile.getName()); item.write(savedFile); } } return true; } catch (Exception e) { e.printStackTrace(); return false; } } public long getFileMaxSize() { return fileMaxSize; } /** 上传文件最大限制 */ public void setFileMaxSize(long fileMaxSize) { this.fileMaxSize = fileMaxSize; } public String getUploadDir() { return uploadDir; } /** 上传目录 */ public void setUploadDir(String uploadDir) { this.uploadDir = uploadDir; } /** 文件列表 */ public List getFileList() { return fileList; } /** 文件磁盘存在真实目录 */ public String getFileRealPath() { return fileRealPath; } }
上传这后文件就需要解压,解压时老是报错,后来发现是中文问题,网上找了很多的解决方法,感觉还是有点麻烦,由于在赶进度就没有解决中文问题,但以后有空的话,我就会去研究一下,试着解决这个问题。
代码如下:
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; /** * File :<b>解压zip文件操作类</b><br/> Time :Oct 19, 2007 <br /> * Note :remark...<br /> * * @author :HuangFeng * @version :1.0 */ public class UnZipper { private static UnZipper unzipper = null; private UnZipper() {} /** * @return 解压zip文件操作类 实例 */ public static UnZipper getInstance() { if (null == unzipper) { return new UnZipper(); } else { return unzipper; } } /** 解压文件列表信息 */ private List<String> msg = null; /** * 创建字符内容8858-1到GB2312 * * @param str * 内容 * @return 创建后的内容 */ private String make8859toGB(String str) { try { String str8859 = new String(str.getBytes("ISO-8859-1"), "GB2312"); return str8859; } catch (UnsupportedEncodingException ioe) { return str; } } /** * 解压到当前文件夹 * * @param fileName * 需要解压的zip文件 * @return 解压后的文件个数 */ public int UnZip(String fileName) { File infile = new File(fileName); return UnZip(fileName, infile.getParent()); } /** * 解压到指定文件夹 * * @param fileName * 需要解压的zip文件 * @param outDir * 解压到的目录 * @return 解压后的文件个数 */ public int UnZip(String fileName, String outDir) { File infile = new File(fileName); int num = 0; msg = new ArrayList<String>(); try { if (!infile.exists()) { throw new IOException(fileName + "文件不存在?"); } // 检查是否是ZIP文件 ZipFile zip = new ZipFile(infile); zip.close(); // 建立与目标文件的输入连接 ZipInputStream in = new ZipInputStream(new FileInputStream(infile)); //如果压缩包里文件有中文名称文件名读取会报错 ZipEntry file = in.getNextEntry(); int i = infile.getAbsolutePath().lastIndexOf('.'); String dirname = outDir; File newdir = new File(dirname); newdir.mkdir(); byte[] c = new byte[1024]; int slen; while (file != null) { System.out.println(file.getName().replace('/', '\\')); msg.add(file.getName().replace('/', '\\')); i = make8859toGB(file.getName()).replace('/', '\\').lastIndexOf('\\'); if (i != -1) { File dirs = new File(dirname + File.separator + make8859toGB(file.getName()).replace('/', '\\').substring(0, i)); dirs.mkdirs(); dirs = null; } if (file.isDirectory()) { File dirs = new File(dirname + File.separator + make8859toGB(file.getName()).replace('/', '\\')); dirs.mkdir(); dirs = null; } else { FileOutputStream out = new FileOutputStream(dirname + File.separator + make8859toGB(file.getName()).replace('/', '\\')); while ((slen = in.read(c, 0, c.length)) != -1) { out.write(c, 0, slen); } out.close(); } num++; file = in.getNextEntry(); } in.close(); } catch (ZipException zipe) { zipe.printStackTrace(); System.out.println(fileName + "不是一个ZIP文件!"); } catch (IOException ioe) { ioe.printStackTrace(); System.out.println("读取" + fileName + "时错误!"); } catch (Exception i) { i.printStackTrace(); new FileNotFoundException("拒绝访问:" + fileName ); } return num; } /** 解压文件下的列表信息 */ public List getMsg() { return msg; } }
解压后,要把解压的数据展现给B端看,并且分析解压的数据,进行业务处理,这里处理业务这一块就不贴出来了,但这些数据分析需要时时更新给B端,显示进度,唉,真烦啊,等数据分析完成并再把相应的文件进行拷贝,删除上传的压缩包等等。最后再给一个处理结果,其实在这里最难的还是处理进度的显示。唉,老要命啊!
下面是文件操作类,拷贝,删除等。
代码如下:
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; /** * File :<b>File.java</b><br/> * Time :Oct 19, 2007 <br /> * Note :文件基本操作类.使用方法:FileUnit.getInstance().XX * <li>1、创建文件目录</li> * <li>2、创建相应文件</li> * <li>3、删除目录和文件</li> * <li>4、文件重命名</li> * <li>5、将内容写入文件中</li> * * @author :HuangFeng * @version :1.0 */ public class FileUtil { private static FileUtil fileunit = null; private FileUtil() { } /** * @return 文件基本操作类实例 */ public static FileUtil getInstance() { if (null == fileunit) { return new FileUtil(); } else { return fileunit; } } /** * 创建文件 * * @param filepath 文件所在目录路径,比如:c:/test/test.txt * @return 操作 */ public boolean makeFile(String filepath) throws IOException { try { File file = new File(filepath); return file.createNewFile(); } catch (Exception e) { e.printStackTrace(); return false; } } /** * 创建目录 * * @param folderPath:目录路径 * @return 操作 * @throws IOException 创建错误 */ public boolean createFolder(String folderPath) { try { File f = new File(folderPath); return f.mkdirs(); } catch (Exception e) { e.printStackTrace(); return false; } } /** * 删除指定路径下的文件<br> * - 有时希望删除文件,比如:图片,文档等.使用方法:removeFile('test.jpg',true); 删除一个文件时flag为true <br> * - 有时希望删除某个目录下的所有文件,使用方法:removeFile('C:\\temp\\',false); <br> * - 注意:如果在删除所有文件的同时也希望删除此目录的话,那么flag = true - removeFile('C:\\temp\\',true); * @param fileUrl 文件或是目录 * @param flag 是否删除本目录 * @throws Exception 文件不存在. 或是 文件拒绝访问. */ public void removeFile(String fileUrl , boolean flag) throws Exception { File file = new File(fileUrl); //文件或目录是否存在. if (!file.exists()) { throw new FileNotFoundException("指定目录不存在:" + file.getName()); } // 保存中间结果 boolean rslt = true; //先尝试直接删除,此文件或是目录 //若是文件则直接删除,不能删除文件为拒绝访问. //若文件夹且非空。枚举、递归删除里面内容 if (!(rslt = file.delete())) { File[] subs = file.listFiles(); if (null == subs ) { //有些系统文件无法删除, 也不是文件夹,所以获得文件列表是空的. throw new Exception("文件拒绝访问:" + file.getName()); } for (int i = 0; i <= subs.length - 1; i++) { if (subs[i].isDirectory()){ //递归删除子文件夹内容 removeFile(subs[i].toString() , flag); } // 删除子文件夹本身 rslt = subs[i].delete(); } //删除文件: flag = false | flag = true 都可以 //删除目录: //flag = false 则删除目录下所有的文件,不包括目录 //flag = true 则删除目录下所有的文件及目录本身 if (flag) { rslt = file.delete(); } } if (!rslt) { throw new Exception("无法删除:" + file.getName()); } } /**拷贝文件<br > * 拷贝文件时只拷贝文件,而不会自动创建目录,文件目录一定要存在, * 否则 throws FileNotFoundException(); - 找不到文件目录. * @param copyPath 拷贝源文件的目录 * @param copyToPath 需要拷贝到哪个目录 * @return 拷贝是否成功 * @throws FileNotFoundException */ public boolean copyFile(String copyFile , String copyToFile) throws FileNotFoundException { try { //建立目标文件 File file = new File(copyFile); // 把文件读入 FileInputStream fileIO = new FileInputStream(file); /* * 建立一个文件的输出流 如果是linux系统请把Files后的"\\"换成"/" */ FileOutputStream fileOUT = new FileOutputStream(copyToFile); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = fileIO.read(buffer, 0, 8192)) != -1) { // 将文件写入服务器 fileOUT.write(buffer, 0, bytesRead); } fileOUT.close(); fileIO.close(); return true; } catch (FileNotFoundException fe) { throw new FileNotFoundException (copyToFile + "此文件目录找不到!"); } catch (Exception e) { e.printStackTrace(); return false; } } /** * 文件重命名<br/> * <li>需要重命名的文件路径filePath一定要存在,否则报FileNotFoundException找不到文件</li> * <li>新文件名,不能与同目录下的文件名同名,否则报Exception-文件已存在或文件拒绝访问。</li> * @param filePath 需要重命名的文件路径 - “C:\1.txt” * @param newName 新文件名 * @return 操作是否成功 */ public boolean renameFile(String filePath, String newName) { try { File f = new File(filePath); //判断文件是否存在 if (f.exists()) { //获得目录 String fileParent = f.getParent(); //创建新文件名 File rf = new File(fileParent + "//" + newName); if (f.renameTo(rf)) { return true; } else { throw new Exception(rf + "文件已存在或文件拒绝访问。"); } } else { throw new FileNotFoundException(filePath + "文件不存在。"); } } catch (Exception e) { e.printStackTrace(); return false; } } /** * 将内容写入文件中 * * @param filepath 文件所在物理路径 * @param content 写入内容 */ public void WriteFile(String filepath, String content) { try { FileWriter filewriter = new FileWriter(filepath, true); PrintWriter printwriter = new PrintWriter(filewriter); printwriter.println(content); printwriter.flush(); printwriter.close(); filewriter.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { FileUtil.getInstance().WriteFile("C:\\log.text", "我试试"); } }
好了任务完成。
发表评论
-
重构-卓越程序员修炼之道培训总结(一)
2010-11-28 20:40 926【重构】老问题总是拿 ... -
让你的DBUtils支持enum
2010-09-09 17:06 1611最近几天在研究Java分布式技术如:Socket、Mina、W ... -
jsp重复提交问题 (来自互联网)
2010-08-06 11:18 1077看了网上的,有几种方法:1 在你的表单页里HEAD区加入这 ... -
jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关
2010-01-06 11:36 919获取一组radio被选中项的值var item = ... -
JSTL
2009-10-13 09:54 13071.core_Tags <%@taglib uri ... -
面试题
2009-09-07 20:26 2946下面二题综合题请大虾给指教,本人对这方面只是了解而没有应用过, ... -
如何让列表的产品图片进行多线程压缩(缩略图)并显示
2009-08-13 16:32 1486如何让列表的产品图片进行多线程压缩(缩略图)并显示。 问题描 ... -
让你的FCKediror支持Struts2
2009-07-02 15:28 2291最近有个项目改版,然后我尝试着用SS2H来进行架构,因为以前一 ... -
JAVA中如何用接口实现多继承和多态
2009-03-09 16:13 9801.JAVA里没有多继承,一 ... -
如何解决POI生成WORD中文乱码问题?
2009-03-09 16:10 3451需求:因为系统用户需要把合同,产品,证书导出WORD。 设计: ... -
jxl读取一个7M的Excel文件内存益出,网上找遍也找不到解决方案
2009-03-04 15:23 2381jxl读取一个7M的Excel文件内存益出,网上找遍也找不到解 ...
相关推荐
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
操作大文件,自定义了一个操作大文件的类,并进行了测试。 chapter7 实现了声音录制等功能。 CHtmlViewProjV2 详细演示了HtmlView的使用与HtmlView事件站点拦截的实现、js调用。 CIVStringSet_Demo 自定义了一个...
Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...
"使用我这个保证能修复好,前几天我姐家的管家婆系统出现此问题,但是在网上找好多解决办法都没有解决了,大部人还要收费。有个数据修复着问我要80RMB。我没有给他,我自己是搞网络的对数据库也不太了解,这两天上班...
EXCEL集成工具箱V8.0 多国语言版(2003-2010通用)增强版! * 软件大小: 22.90MB * 软件授权: 免费共享软件 * 软件语言: 多国语言[中文繁体/简体/英文] * 开 发 商: 创思维软件工作室 * 更新时间: 2010-09-22...
72 <br>0102 将字符串首字母转换大写 72 <br>0103 如何进行字节数组和字符串的相互转换 72 <br>0104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 73 <br>4.2 获取字符串信息 73 ...
简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...