Java 实现文件上传、下载、打包、文件copy、文件夹copy。

时间:2023-12-04 18:07:56

文件and文件夹copy

package org.test;

import java.io.*;

public class FileCopy {

    /**
* 复制单个文件
*
* @param oldPath
* String 原文件路径 如:D:\\bbbb\\ssss.txt
* @param newPath
* String 复制后路径 如:D:\\bbbb\\aa\\ssss.txt
* @return boolean
*/
public void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { // 文件存在时
InputStream inStream = new FileInputStream(oldPath); // 读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; // 字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
System.out.println("复制单个文件操作出错");
e.printStackTrace();
}
} /**
* 复制整个文件夹内容
*
* @param oldPath
* String 原文件路径 如:D:\\bbbb
* @param newPath
* String 复制后路径 如:E:\\bbbb
* @return boolean
*/
public void copyFolder(String oldPath, String newPath) {
try {
(new File(newPath)).mkdirs(); // 如果文件夹不存在 则建立新文件夹
File a = new File(oldPath);
String[] file = a.list();
File temp = null;
for (int i = 0; i < file.length; i++) {
if (oldPath.endsWith(File.separator)) {
temp = new File(oldPath + file[i]);
} else {
temp = new File(oldPath + File.separator + file[i]);
}
if (temp.isFile()) {
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath
+ "/" + (temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ((len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if (temp.isDirectory()) {// 如果是子文件夹
copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);
}
}
} catch (Exception e) {
System.out.println("复制整个文件夹内容操作出错");
e.printStackTrace();
}
} public static void main(String args[]) {
FileCopy bp = new FileCopy();
bp.copyFile("D:\\bbbb\\ssss.txt","D:\\bbbb\\aa\\ssss.txt" );
bp.copyFolder("D:\\bbbb", "E:\\bbbb");
}
}

文件下载

package org.test;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*; public class FileDownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.downLoad(req, resp);
} public void downLoad(HttpServletRequest req, HttpServletResponse resp)
throws IOException { String fileTrueName = req.getParameter("fileName");
resp.setContentType("application/x-msdownload; charset=utf-8");
resp.setHeader("Content-disposition", "attachment;filename=\""
+ fileTrueName + "\""); byte[] buffered = new byte[1024]; BufferedInputStream input = new BufferedInputStream(
new FileInputStream("D:/" + fileTrueName));
DataOutputStream output = new DataOutputStream(resp.getOutputStream()); while (input.read(buffered, 0, buffered.length) != -1) {
output.write(buffered, 0, buffered.length);
} input.close();
output.close();
} }

对文件夹进行打包

package org.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; /**
* 将文件打包成ZIP压缩文件
* @author LanP
* @since 2012-3-1 15:47
*/
public final class FileToZip { private FileToZip() { } /**
* 将存放在sourceFilePath目录下的源文件,打包成fileName名称的ZIP文件,并存放到zipFilePath。
* @param sourceFilePath 待压缩的文件路径
* @param zipFilePath 压缩后存放路径
* @param fileName 压缩后文件的名称
* @return flag
*/
public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName) {
boolean flag = false;
File sourceFile = new File(sourceFilePath);
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
ZipOutputStream zos = null; if(sourceFile.exists() == false) {
System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath + " 不存在. <<<<<<");
} else {
try {
File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
if(zipFile.exists()) {
System.out.println(">>>>>> " + zipFilePath + " 目录下存在名字为:" + fileName + ".zip" + " 打包文件. <<<<<<");
} else {
File[] sourceFiles = sourceFile.listFiles();
if(null == sourceFiles || sourceFiles.length < 1) {
System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath + " 里面不存在文件,无需压缩. <<<<<<");
} else {
fos = new FileOutputStream(zipFile);
zos = new ZipOutputStream(new BufferedOutputStream(fos));
byte[] bufs = new byte[1024*10];
for(int i=0;i<sourceFiles.length;i++) {
// 创建ZIP实体,并添加进压缩包
ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
zos.putNextEntry(zipEntry);
// 读取待压缩的文件并写进压缩包里
fis = new FileInputStream(sourceFiles[i]);
bis = new BufferedInputStream(fis,1024*10);
int read = 0;
while((read=bis.read(bufs, 0, 1024*10)) != -1) {
zos.write(bufs, 0, read);
}
}
flag = true;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
// 关闭流
try {
if(null != bis) bis.close();
if(null != zos) zos.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
} return flag;
} /**
* 将文件打包成ZIP压缩文件,main方法测试
* @param args
*/
public static void main(String[] args) {
String sourceFilePath = "D:\\aaaa";
String zipFilePath = "D:\\aaaa";
String fileName = "aaaa";
boolean flag = FileToZip.fileToZip(sourceFilePath, zipFilePath, fileName);
if(flag) {
System.out.println(">>>>>> 文件打包成功. <<<<<<");
} else {
System.out.println(">>>>>> 文件打包失败. <<<<<<");
}
}
}

下载

package org.test;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*; public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { String oper = request.getParameter("oper"); if ("upDownLoad".equals(oper)) {
this.upDownLoad(request, response);
}
} public void upDownLoad(HttpServletRequest request,HttpServletResponse response){ boolean flag = false;
String successMessage = "Upload file successed."; String fileName = null;
DataInputStream in = null;
FileOutputStream fileOut = null; /** 取得客户端的传递类型 */
String contentType = request.getContentType();
byte dataBytes[] = null ;
try {
/** 确认数据类型是 multipart/form-data */
if (contentType != null
&& contentType.indexOf("multipart/form-data") != -1) {
/** 取得上传文件流的字节长度 */
int fileSize = request.getContentLength(); /** 可以判断文件上传上线
if (fileSize > MAX_SIZE) {
successMessage = "Sorry, file is too large to upload.";
return;
} */ /** 读入上传的数据 */
in = new DataInputStream(request.getInputStream()); /** 保存上传文件的数据 */
int byteRead = 0;
int totalBytesRead = 0;
dataBytes = new byte[fileSize]; /** 上传的数据保存在byte数组 */
while(totalBytesRead < fileSize){
byteRead = in.read(dataBytes, totalBytesRead, fileSize);
totalBytesRead += byteRead;
} int i = dataBytes.length;
/** 根据byte数组创建字符串 */
String file = new String(dataBytes,"UTF-8");
i = file.length();
/** 取得上传的数据的文件名 */ String upFileName = file.substring(file.indexOf("filename=\"") + 10);
upFileName = upFileName.substring(0, upFileName.indexOf("\n"));
upFileName = upFileName.substring(upFileName.lastIndexOf("\\") + 1, upFileName.indexOf("\"")); /** 取得数据的分隔字符串 */
String boundary = contentType.substring(contentType.lastIndexOf("boundary=") + 9, contentType.length());
/** 创建保存路径的文件名 */
fileName = upFileName; int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n",pos) + 1;
pos = file.indexOf("\n",pos) + 1;
pos = file.indexOf("\n",pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos)-4; /** 取得文件数据的开始的位置 */
int startPos = file.substring(0, pos).length(); /** 取得文件数据的结束的位置 */
int endPos = file.substring(boundaryLocation).length(); /** 创建文件的写出类 */
// fileOut = new FileOutputStream(this.getServletContext().getRealPath("/image")+"/"+fileName);
fileOut = new FileOutputStream("D:"+"/"+fileName);
/** 保存文件的数据 */
fileOut.write(dataBytes, startPos, (fileSize - endPos - startPos)); }else{
successMessage = "Data type is not multipart/form-data.";
} } catch (Exception e) {
successMessage = e.getMessage(); } finally {
try {
//close open file
in.close();
if(flag){
response.getOutputStream().write(("<a href=\"download?fileName="+fileName+"\" ><img src=\"image/"+fileName+"\"/></a>").getBytes());
}
response.getOutputStream().write(successMessage.getBytes());
response.getOutputStream().close();
} catch (Exception e) {
e.printStackTrace();
}
} }
}