java 保存多个文件

  1. Java对Zip格式类库支持得比较全面,得用它可以把多个文件压缩成一个压缩包。这个类库使用的是标准Zip格式,所以能与很多的压缩工具兼容。

    ZipOutputStream类有设置压缩方法以及在压缩方式下使用的压缩级别,zipOutputStream.setMethod(int method)设置用于条目的默认压缩方法。只要没有为单个 ZIP 文件条目指定压缩方法,就使用ZipOutputStream所设置的压缩方法来存储,默认值为 ZipOutputStream.DEFLATED(表示进行压缩存储),还可以设置成STORED(表示仅打包归档存储)。ZipOutputStream在设置了压缩方法为DEFLATED后,我们还可以进一步使用setLevel(int level)方法来设置压缩级别,压缩级别值为0-9共10个级别(值越大,表示压缩越利害),默认为Deflater.DEFAULT_COMPRESSION=-1。当然我们也可以通过条目ZipEntry的setMethod方法为单个条件设置压缩方法。

    类ZipEntry描述了存储在ZIP文件中的压缩文件。类中包含有多种方法可以用来设置和获得ZIP条目的信息。类ZipEntry是被ZipFile[zipFile.getInputStream(ZipEntry entry)]和ZipInputStream使用来读取ZIP文件,ZipOutputStream来写入ZIP文件的。有以下这些有用的方法:getName()返回条目名称、isDirectory()如果为目录条目,则返回 true(目录条目定义为其名称以 '/' 结尾的条目)、setMethod(int method) 设置条目的压缩方法,可以为 ZipOutputStream.STORED 或 ZipOutputStream .DEFLATED。

  2. import java.io.BufferedInputStream;   
  3. import java.io.BufferedOutputStream;   
  4. import java.io.BufferedReader;   
  5. import java.io.FileInputStream;   
  6. import java.io.FileOutputStream;   
  7. import java.io.FileReader;   
  8. import java.util.Enumeration;   
  9. import java.util.zip.Adler32;   
  10. import java.util.zip.CheckedInputStream;   
  11. import java.util.zip.CheckedOutputStream;   
  12. import java.util.zip.ZipEntry;   
  13. import java.util.zip.ZipFile;   
  14. import java.util.zip.ZipInputStream;   
  15. import java.util.zip.ZipOutputStream;   
  16. /**  
  17.  *   
  18.  * 用Zip保存多个文件.  
  19.  *  
  20.  */  
  21. public class ZipCompress {   
  22.   
  23.     private static final String FILE = "d:\\test.zip";   
  24.        
  25.     public static void main(String[] args) throws Exception {   
  26.         //建立一个文件输出流   
  27.         FileOutputStream file = new FileOutputStream(FILE);   
  28.         //建立一个CheckSum输出流,Adler32 CheckSum类型校验和   
  29.         CheckedOutputStream csum = new CheckedOutputStream(file, new Adler32());   
  30.         //zip输出流   
  31.         ZipOutputStream zos = new ZipOutputStream(csum);   
  32.         //使用缓冲输出流包装,提升性能   
  33.         BufferedOutputStream out = new BufferedOutputStream(zos);   
  34.         //注释   
  35.         zos.setComment("A test of Java Zipping");   
  36.         for(String s : args){   
  37.             System.out.println("Writing file " + s);   
  38.             //读文件   
  39.             BufferedReader in = new BufferedReader(new FileReader(s));   
  40.                
  41.             zos.putNextEntry(new ZipEntry(s));   
  42.             int c;   
  43.             while((c = in.read()) != -1){   
  44.                 out.write(c);   
  45.             }   
  46.             in.close();   
  47.             out.flush();   
  48.         }   
  49.         out.close();   
  50.            
  51.         System.out.println("Checksum: " + csum.getChecksum().getValue());   
  52.         //解压缩   
  53.         System.out.println("Reading file: ");   
  54.         FileInputStream in = new FileInputStream(FILE);   
  55.         CheckedInputStream csumi = new CheckedInputStream(in, new Adler32());   
  56.         ZipInputStream zin = new ZipInputStream(csumi);   
  57.         BufferedInputStream bis = new BufferedInputStream(zin);   
  58.         ZipEntry ze;   
  59.         while((ze = zin.getNextEntry()) != null){   
  60.             System.out.println("Reading file " + ze);   
  61.             int x;   
  62.             while((x = bis.read()) != -1){   
  63.                 System.out.write(x);   
  64.             }   
  65.         }   
  66.            
  67.         if(args.length == 1){   
  68.             System.out.println("Checksum: " + csumi.getChecksum().getValue());   
  69.         }   
  70.         bis.close();   
  71.            
  72.         ZipFile zf = new ZipFile(FILE);   
  73.         @SuppressWarnings("rawtypes")   
  74.         Enumeration e = zf.entries();   
  75.         while(e.hasMoreElements()){   
  76.             ZipEntry ze2 = (ZipEntry)e.nextElement();   
  77.             System.out.println("File: " + ze2);   
  78.         }   
  79.         zf.close();   
  80.            
  81.     }   
  82.   
  83. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,我们可以使用Java IO库中的FileInputStream类和FileOutputStream类来实现上传多个文件保存至本地文件夹的功能。具体的步骤如下: 1. 创建一个java.io.File对象,用于表示要保存的本地文件夹的路径。 2. 创建一个javax.servlet.http.Part对象数组,表示上传的多个文件。在处理文件上传的Servlet中,可以通过request.getParts()方法获取到上传的所有文件的Part对象数组。 3. 遍历Part对象数组,使用Part.getInputStream()方法获得每个文件的输入流,将其保存至本地文件夹。这一步可使用FileInputStream类和FileOutputStream类来完成。其中,可以使用Part.getSubmittedFileName()方法获取上传文件文件名,用于构造保存到本地的文件的File对象。 4. 在处理完所有的上传文件后,关闭文件输入流和文件输出流。 简单示例代码如下: ``` @MultipartConfig public class UploadServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 获取保存的本地文件夹路径 String savePath = "/path/to/save/folder"; File fileSaveDir = new File(savePath); if (!fileSaveDir.exists()) { fileSaveDir.mkdir(); } // 获取上传的所有文件 Part[] parts = request.getParts().toArray(new Part[0]); for (Part part : parts) { // 构造保存到本地的文件对象 String fileName = extractFileName(part); File saveFile = new File(savePath + File.separator + fileName); // 使用FileInputStream类和FileOutputStream类将上传的文件保存至本地文件夹 InputStream inputStream = part.getInputStream(); OutputStream outputStream = new FileOutputStream(saveFile); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } inputStream.close(); outputStream.close(); } // 返回上传成功信息 response.getWriter().write("上传成功!"); } private String extractFileName(Part part) { String contentDisposition = part.getHeader("content-disposition"); String[] items = contentDisposition.split(";"); for (String item : items) { if (item.trim().startsWith("filename")) { return item.substring(item.indexOf("=") + 2, item.length() - 1); } } return ""; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值