`
DonBallKing
  • 浏览: 5417 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类

实现文件上传和下载的Java类

阅读更多
package com.db.king.common.file;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.upload.FormFile;

/**
 * 文件操作类
 * @author DonBallKing
 *
 */
public class FileUtil {
	//上传单个文件
	public static String uploadOneFile(FormFile formFile,String savePath){
		String uploadMess = null;
		if(formFile==null){
			uploadMess = "没有取得要上传的文件!";
			return uploadMess;
		}
		String fileName = formFile.getFileName();
		try{
			InputStream in = formFile.getInputStream();
			File saveFile = new File(savePath + "/" + fileName);
			if (saveFile.exists()) {
				saveFile.delete();
			}
			OutputStream out = new FileOutputStream(saveFile);
			int bytesRead = 0;
			byte[] buffer = new byte[8192];
			while ((bytesRead = in.read(buffer, 0, 8192)) != -1) {
				out.write(buffer, 0, bytesRead);
			}
			out.close();
			in.close();
		}catch(Exception ex){
			ex.printStackTrace();
			uploadMess = fileName+"文件上传失败!请重试!";
			return uploadMess;
		}
		return null;
	}
	
	//上传单个文件
	public static String uploadOneFile(FormFile formFile,String savePath,String saveName){
		String uploadMess = null;
		if(formFile==null){
			uploadMess = "没有取得要上传的文件!";
			return uploadMess;
		}
		String fileName = saveName;
		if(fileName==null||fileName.equals("")){
			fileName = formFile.getFileName();
		}
		try{
			InputStream in = formFile.getInputStream();
			File saveFile = new File(savePath + "/" + fileName);
			if (saveFile.exists()) {
				saveFile.delete();
			}
			OutputStream out = new FileOutputStream(saveFile);
			int bytesRead = 0;
			byte[] buffer = new byte[8192];
			while ((bytesRead = in.read(buffer, 0, 8192)) != -1) {
				out.write(buffer, 0, bytesRead);
			}
			out.close();
			in.close();
		}catch(Exception ex){
			ex.printStackTrace();
			uploadMess = fileName+"文件上传失败!请重试!";
			return uploadMess;
		}
		return null;
	}
	
	//下载文件,以zip压缩格式 (下载的文件后缀.csv)
	public static String downLoadZipCsvFile(String filePath,String fileName,String saveName,String reportTitle,HttpServletResponse m_response){
		String downLoadMess = null;
		File file = new File(filePath+"/"+fileName);
		if(!file.exists()){
			downLoadMess = "文件不存在!";
			return downLoadMess;
		}
		try{
		m_response.setContentType("application/x-msdownload");
			saveName += ".zip";
			String saveDownLoadName = URLEncoder.encode(saveName,"UTF-8");
			m_response.setHeader("Content-Disposition", "attachment;"+ " filename=" + saveDownLoadName);
			LineNumberReader fReader = new LineNumberReader(new FileReader(file));
			PrintWriter fWriter;
			ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
					m_response.getOutputStream()));
			out.setMethod(ZipOutputStream.DEFLATED);
			fWriter = new PrintWriter(out);
			String savesplitfilename = "";
			long lineCount = 0;
			long splitcount = 1;
			while (true) {
				savesplitfilename = "";
				if (String.valueOf(splitcount).length() == 1)
					savesplitfilename += "00" + splitcount;
				else if (String.valueOf(splitcount).length() == 2)
					savesplitfilename += "0" + splitcount;
				else
					savesplitfilename += splitcount;
				    savesplitfilename +=fileName;
				ZipEntry entry = new ZipEntry(savesplitfilename);
				out.putNextEntry(entry);
				if(reportTitle!=null&&!"".equals(reportTitle)){
					fWriter.println(reportTitle);
				}
				String bufferLine = null;
				while ((bufferLine = fReader.readLine()) != null) {
					fWriter.println(bufferLine);
					lineCount++;
					if (lineCount > 65500) {
						lineCount = 0;
						break;
					}
				}
				fWriter.flush();
				splitcount++;
				if (bufferLine == null) {
					break;
				}
			}
			fReader.close();
			fReader = null;
			fWriter.close();
			fWriter = null;
		}catch(Exception ex){
			ex.printStackTrace();
			downLoadMess = ex.getMessage();
			}
		return downLoadMess;
	}
	
	public static String downLoadZipCsvFileAddCol(String filePath,String fileName,String saveName,String reportTitle,String colName,HttpServletResponse m_response){
		String downLoadMess = null;
		File file = new File(filePath+"/"+fileName);
		if(!file.exists()){
			downLoadMess = "文件不存在!";
			return downLoadMess;
		}
		try{
		m_response.setContentType("application/x-msdownload");
			saveName += ".zip";
			String saveDownLoadName = URLEncoder.encode(saveName,"UTF-8");
			m_response.setHeader("Content-Disposition", "attachment;"+ " filename=" + saveDownLoadName);
			LineNumberReader fReader = new LineNumberReader(new FileReader(file));
			PrintWriter fWriter;
			ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
					m_response.getOutputStream()));
			out.setMethod(ZipOutputStream.DEFLATED);
			fWriter = new PrintWriter(out);
			String savesplitfilename = "";
			long lineCount = 0;
			long splitcount = 1;
			while (true) {
				savesplitfilename = "";
				if (String.valueOf(splitcount).length() == 1)
					savesplitfilename += "00" + splitcount;
				else if (String.valueOf(splitcount).length() == 2)
					savesplitfilename += "0" + splitcount;
				else
					savesplitfilename += splitcount;
				    savesplitfilename +=fileName;
				ZipEntry entry = new ZipEntry(savesplitfilename);
				out.putNextEntry(entry);
				if(reportTitle!=null&&!"".equals(reportTitle)){
					fWriter.println(reportTitle);
				}
				if(colName!=null&&!"".equals(colName)){
					fWriter.println(colName);
				}
				String bufferLine = null;
				while ((bufferLine = fReader.readLine()) != null) {
					fWriter.println(bufferLine);
					lineCount++;
					if (lineCount > 65500) {
						lineCount = 0;
						break;
					}
				}
				fWriter.flush();
				splitcount++;
				if (bufferLine == null) {
					break;
				}
			}
			fReader.close();
			fReader = null;
			fWriter.close();
			fWriter = null;
		}catch(Exception ex){
			ex.printStackTrace();
			downLoadMess = ex.getMessage();
			}
		return downLoadMess;
	}
	
	//下载文件,以普通格式
	public static void downLoadNormalFile(String filePath,String fileName,String saveFileName,HttpServletResponse m_response){

		File file = new File(filePath+"/"+fileName);
		if(!file.exists()){
			return ;
		}
		if(saveFileName==null||"".equals(saveFileName.trim())){
			saveFileName = fileName;
		}
		try{
			saveFileName = URLEncoder.encode(saveFileName,"UTF-8");
			m_response.setContentType("application/x-msdownload");
			m_response.setHeader("Content-Disposition", "attachment;"+ " filename=" + saveFileName);
			ServletOutputStream sos = null;
			FileInputStream fis = null;
			byte[] b = new byte[1024];
			fis = new FileInputStream(file);
			sos = m_response.getOutputStream();
			int len=0;
		  	  while ( (len = fis.read(b)) > 0) {
		  		sos.write(b,0, len); 
		  	   }
				sos.close();
				fis.close();
		}catch(Exception ex){
			ex.printStackTrace();			
			}
	}
}



分享到:
评论
1 楼 qq138744 2012-04-26  
   

相关推荐

    java图形化实现文件上传_javagui上传文件,gui编写上传下载文件功能-Java文档类资源

    利用java图形化界面和网络编程相结合实现的--文件上传。 运行步骤: (1)分别运行工程两个包中的两个.java文件(UploadClient.java和UploadServer.java)分别会弹出“上传客服端”和“上传服务器”两个窗口。 ...

    java代码实现文件上传和下载

    在java代码中实现文件的上传和下载,通过页面的file文件上传到java代码段,获取文件的大小和名字

    java实现 上传和下载

    在Java编程语言中,文件上传和下载是网络应用中常见的功能,特别是在Web应用程序中。这里,我们将深入探讨如何实现这两个核心操作,以及相关的技术、工具和最佳实践。 首先,文件上传通常涉及到用户通过Web表单将...

    Java使用NFS实现上传、下载、读取文件工具类

    高性能:通过合理利用多线程、缓冲区优化、流式处理等手段,有效提升了文件上传下载的速度和整体系统的性能。 健壮性:在异常处理方面,工具类充分考虑了网络不稳定、文件不存在、权限不足等各种可能的问题场景,...

    java实现pdf上传,下载,在线预览,删除,修改等功能

    在Java开发中,处理PDF文件是一项常见的任务,包括上传、下载、在线预览、删除以及修改等操作。这里我们将深入探讨这些功能的实现,并结合标签`java xpdf java实现pdf`来讨论XPDF库在Java中的应用。 1. **PDF上传**...

    JAVA Socket编程实现文件上传

    以上就是使用Java Socket编程实现文件上传涉及到的主要知识点,包括Socket通信机制、文件I/O、数据库操作、异常处理、多线程、安全性和性能优化等方面。理解并掌握这些内容,对于开发高效、可靠的文件上传系统至关...

    Java Spring Boot应用程序中实现文件上传和下载功能

    ### Java Spring Boot应用程序中实现文件上传和下载功能 在现代Web开发中,文件上传与下载是常见的需求之一。Spring Boot框架提供了简洁的方式帮助开发者轻松实现这些功能。本文将详细介绍如何在Spring Boot项目中...

    java图形化实现文件上传

    利用java图形化界面和网络编程相结合实现的--文件上传。 运行步骤: (1)分别运行工程两个包中的两个.java文件(UploadClient.java和UploadServer.java)分别会弹出“上传客服端”和“上传服务器”两个窗口。 ...

    java 实现视频上传

    在Java开发中,实现视频上传是一项常见的任务,尤其在构建Web应用或云存储服务时。这个Demo涵盖了几个关键的技术点,包括文件上传、视频转码和播放。让我们逐一深入探讨这些知识点。 首先,**文件上传**是Web应用...

    java实现cos上传与下载

    Java实现COS(Cloud Object Storage)上传与下载是云计算服务中的常见操作,主要涉及对象存储的概念、Java SDK的使用以及文件I/O操作。COS通常由云服务提供商提供,用于存储大量的非结构化数据,如图片、视频、文档...

    java多文件上传实现

    在Java开发中,多文件上传是一项常见的功能,尤其在Web应用中,用户可能需要一次性上传多个文件,如图片、文档等。本知识点将详细介绍如何在Java中实现这一功能,以及结合Flash实现上传界面并显示上传进度条。 1. *...

    java实现文件批量上传

    在Java开发中,文件批量上传是一项常见的功能,尤其在企业级应用中,用户可能需要上传大量数据或文件。本教程将介绍如何利用SWF(Simple Workflow)和EXT库来实现这一功能。SWF是一个用于创建富互联网应用程序的前端...

    Java版Linux文件上传下载、windows本地文件上传下载

    在Java编程环境中,实现Linux与Windows之间的文件上传和下载是一项常见的任务,特别是在分布式系统和跨平台应用中。本文将深入探讨如何使用Java技术实现在Linux和Windows之间进行文件的互传,以及创建一个HTML界面来...

    Java实现FTP批量大文件上传下载.pdf

    Java实现FTP批量大文件上传下载 一、Java FTP客户端库的选择 在选择Java FTP客户端库时,需要考虑多个因素,例如性能、安全性、可靠性等。当前有多种FTP客户端库可供选择,例如J-FTP、SimpleFTP、FTPClient等。每...

    Java对Samba进行上传与下载文件-jcifs

    Java对Samba进行上传与下载文件的技术主要涉及Java编程、Samba服务器以及jcifs库的使用。Samba是一个开源软件,允许Linux/Unix系统与Windows系统之间进行文件共享,而jcifs是Java的一个库,它提供了对SMB(Server ...

    java操作mongoDB实现文件上传预览打包下载

    在Java编程环境中,...总的来说,Java与MongoDB的集成提供了丰富的功能,可以方便地实现文件的上传、下载、预览和打包下载。通过理解MongoDB的API和Java的IO流处理,开发者可以构建出高效且用户友好的文件管理系统。

    java实现文件上传与下载

    在Java开发中,文件上传和下载是常见的功能需求,尤其...以上就是关于“Java实现文件上传与下载”以及使用Struts2框架进行操作的详细内容。理解并掌握这些知识点,将有助于在实际项目中实现高效、安全的文件管理功能。

    Java实现文件与图片的上传下载---三种方式

    在Java开发中,文件和图片的上传下载是常见的功能需求,尤其在Web应用中更为重要。本篇文章将详细探讨三种不同的实现方式,分别是使用JSP+Servlet、SmartUpload库以及Apache的FileUpload组件。 首先,我们来看第一...

    java 实现大文件上传

    例如,在线文档分享、用户资料上传、多媒体文件存储等方面,都需要通过Web端实现文件的上传与管理。然而,在Java Web开发中,并没有提供直接且高效的文件上传解决方案,因此开发者通常会选择一些开源库来辅助完成这...

    java实现图片下载和上传.zip

    以上就是关于“java实现图片下载和上传.zip”项目中的核心知识点,包括Spring、SpringMVC、MyBatis、Commons-FileUpload和Commons-IO的使用,以及在实际应用中需要考虑的安全性和性能优化措施。通过这些技术,开发者...

Global site tag (gtag.js) - Google Analytics