精华内容
下载资源
问答
  • NULL 博文链接:https://thinktothings.iteye.com/blog/1436303
  • Java提取压缩包中的文件,文件操作的范畴,操作对象为ZIP格式的压缩文件,将从ZIP中提取出BMP图像文件,要将从压缩包中提取文件,必须先解压压缩包,然后将指定文件拷贝出来,代码中先实现了对zip文件的解压,然后...
  • java解压/读取rar文件

    千次阅读 2020-02-22 20:48:31
    转自在此感谢作者:... <!-- 解压rar --> <dependency> <groupId>com.github.junrar</groupId> <artifactId>junrar</artifactId&...

    转自在此感谢作者:https://blog.csdn.net/lbf5210/article/details/51206642

    <!-- 解压rar -->
    <dependency>
       <groupId>com.github.junrar</groupId>
       <artifactId>junrar</artifactId>
       <version>3.0.0</version>
    </dependency>

    java实现解压(zip和rar文件)实例-解决中文乱码问题

    1、实现说明:

    在下面引入的包中可以看出:

    1)压缩、解压zip是用到的apache 的zip包,需要在引入jar包(jar-ant.rar);

    2)压缩、解压rar需要用到的是junrar,这里需要引入第三方jar包,我用到的是junrar-0.7.jar

    下面的两个方法是实现解压文件的实例,压缩文件的实现其实也很简单,大家可以查查实现方式,在此我还是不关心压缩文件(相对来说用的少)

     
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.util.Enumeration;
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
    import com.github.junrar.Archive;
    import com.github.junrar.rarfile.FileHeader;
     
     
    /**
     * 
     * @author liuBf 
     * 类说明:解压文件公用类 *
     */
    public class UnZipOrRarUtils {
     
     
        /*** 这里用到了synchronized ,也就是防止出现并发问题 ***/
        public static synchronized void untar(String tarFileName, String extPlace)
                throws Exception {
            unRarFile(tarFileName, extPlace);
        }
     
     
        public static synchronized void unzip(String zipFileName, String extPlace)
                throws Exception {
            unZipFiles(zipFileName, extPlace);
        }
     
     
        /**
         * 解压zip格式的压缩文件到指定位置
         * 
         * @param zipFileName
         *            压缩文件
         * @param extPlace
         *            解压目录
         * @throws Exception
         */
        @SuppressWarnings("unchecked")
        public static boolean unZipFiles(String zipFileName, String extPlace)
                throws Exception {
            System.setProperty("sun.zip.encoding",
                    System.getProperty("sun.jnu.encoding"));
            try {
                (new File(extPlace)).mkdirs();
                File f = new File(zipFileName);
                ZipFile zipFile = new ZipFile(zipFileName, "GBK"); // 处理中文文件名乱码的问题
                if ((!f.exists()) && (f.length() <= 0)) {
                    throw new Exception("要解压的文件不存在!");
                }
                String strPath, gbkPath, strtemp;
                File tempFile = new File(extPlace);
                strPath = tempFile.getAbsolutePath();
                Enumeration<?> e = zipFile.getEntries();
                while (e.hasMoreElements()) {
                    ZipEntry zipEnt = (ZipEntry) e.nextElement();
                    gbkPath = zipEnt.getName();
                    if (zipEnt.isDirectory()) {
                        strtemp = strPath + File.separator + gbkPath;
                        File dir = new File(strtemp);
                        dir.mkdirs();
                        continue;
                    } else { // 读写文件
                        InputStream is = zipFile.getInputStream(zipEnt);
                        BufferedInputStream bis = new BufferedInputStream(is);
                        gbkPath = zipEnt.getName();
                        strtemp = strPath + File.separator + gbkPath;// 建目录
                        String strsubdir = gbkPath;
                        for (int i = 0; i < strsubdir.length(); i++) {
                            if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {
                                String temp = strPath + File.separator
                                        + strsubdir.substring(0, i);
                                File subdir = new File(temp);
                                if (!subdir.exists())
                                    subdir.mkdir();
                            }
                        }
                        FileOutputStream fos = new FileOutputStream(strtemp);
                        BufferedOutputStream bos = new BufferedOutputStream(fos);
                        int c;
                        while ((c = bis.read()) != -1) {
                            bos.write((byte) c);
                        }
                        bos.close();
                        fos.close();
                    }
                }
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        /**
         * 根据原始rar路径,解压到指定文件夹下.
         * 
         * @param srcRarPath
         *            原始rar路径
         * @param dstDirectoryPath
         *            解压到的文件夹
         */
        public static void unRarFile(String srcRarPath, String dstDirectoryPath) {
            if (!srcRarPath.toLowerCase().endsWith(".rar")) {
                System.out.println("非rar文件!");
                return;
            }
            File dstDiretory = new File(dstDirectoryPath);
            if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹
                dstDiretory.mkdirs();
            }
            Archive a = null;
            try {
                a = new Archive(new File(srcRarPath));
                if (a != null) {
                    // a.getMainHeader().print(); // 打印文件信息.
                    FileHeader fh = a.nextFileHeader();
                    while (fh != null) {
                        // 防止文件名中文乱码问题的处理
                        String fileName = fh.getFileNameW().isEmpty() ? fh
                                .getFileNameString() : fh.getFileNameW();
                        if (fh.isDirectory()) { // 文件夹
                            File fol = new File(dstDirectoryPath + File.separator
                                    + fileName);
                            fol.mkdirs();
                        } else { // 文件
                            File out = new File(dstDirectoryPath + File.separator
                                    + fileName.trim());
                            try {
                                if (!out.exists()) {
                                    if (!out.getParentFile().exists()) {// 相对路径可能多级,可能需要创建父目录.
                                        out.getParentFile().mkdirs();
                                    }
                                    out.createNewFile();
                                }
                                FileOutputStream os = new FileOutputStream(out);
                                a.extractFile(fh, os);
                                os.close();
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        }
                        fh = a.nextFileHeader();
                    }
                    a.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    ————————————————
    版权声明:本文为CSDN博主「卡奇派对」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lbf5210/article/details/51206642

    public static void main(String[] args) {
        String rarPath = "C:\\Users\\DELL\\Desktop\\sim\\1.rar";
        File rarFile = new File(rarPath);
        try {
            UnZipAnRar.unRar(rarFile, "C:\\Users\\DELL\\Desktop\\");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    读取rar文件名称

    import com.github.junrar.Archive;
    import com.github.junrar.rarfile.FileHeader;
    
    import java.io.*;
    import java.util.Enumeration;
    
    public class UnZipAnRar {
        public static void unRar(File rarFile, String outDir) throws Exception {
            File outFileDir = new File(outDir);
            if (!outFileDir.exists()) {
                boolean isMakDir = outFileDir.mkdirs();
                if (isMakDir) {
                    System.out.println("创建压缩目录成功");
                }
            }
            Archive archive = new Archive(new FileInputStream(rarFile));
            FileHeader fileHeader = archive.nextFileHeader();
            while (fileHeader != null) {
                String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader
                        .getFileNameString() : fileHeader.getFileNameW();
                System.out.println(fileName);
                if (fileHeader.isDirectory()) {
                    fileHeader = archive.nextFileHeader();
                    continue;
                }
                fileHeader = archive.nextFileHeader();
            }
            archive.close();
        }
    }
    展开全文
  • Java压缩数据文件并实现传输功能,实例化套接字,在命令窗口输出提示信息,输出客户机地址,得到输出流 ,压缩输出流,设定缓冲区大小,读取数据,写入数据到文件,关闭输出流,关闭套接字。
  • java 读取压缩文件

    2021-07-05 14:57:59
    用作记录方便以后查找,用到的工具类:commons-compress maven依赖 org.apache.commons commons-compress 1.4.1 java代码段读取数据: BufferedInputStream bin = new BufferedInputStream(inputStream); ...

    用作记录方便以后查找,用到的工具类:commons-compress

    maven依赖

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.4.1</version>
    </dependency>
    

    java代码段读取数据:

    BufferedInputStream bin = new BufferedInputStream(inputStream);
    ArchiveInputStream ais = new ArchiveStreamFactory().createArchiveInputStream(archive,bin);
    ArchiveEntry entry;
    while((entry = ais.getNextEntry()) !=null){
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(ais));
        while((line=bufferedReader.readLine())!=null){
            System.out.println(line)
        }
    }

    支持的压缩格式

    public static final String AR = "ar";
    public static final String CPIO = "cpio";
        public static final String DUMP = "dump";
        public static final String JAR = "jar";
        public static final String TAR = "tar";
        public static final String ZIP = "zip";

    展开全文
  • Java读取远程网络上的文件,可以得到文件,实例化地址输入框和按钮,实例化一个面板,用于容纳地址输入框和取文件按钮,增加组件到容器上,打开和创建文件输入流并关闭输入流,设置窗口尺寸和可视化,关闭窗口时退出...
  • //得到待压缩文件路径名   String entryname=filename.substring(filename.lastIndexOf("\\") 1); //得到文件名   entry=new ZipEntry(entryname); //实例化条目列表   zout.putNextEntry(entry); //将ZIP条目...
  • java 读取ZIP和RAR压缩包的目录结构

    热门讨论 2014-09-19 18:08:50
    java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
  • java实现对rar文件和zip文件的解压缩

    万次阅读 2017-07-12 16:47:53
    java实现对rar文件和zip文件的解压缩 一.对zip文件的解压缩 1.1 使用ZIP4J实现 zip4j官方说明: ...针对ZIP压缩文件创建、添加、抽出、更新和移除文件 Read/Write password protected Zip files (读写

    java实现对rar文件和zip文件的解压缩

    一.对zip文件的解压缩

    1.1 使用ZIP4J实现

    zip4j官方说明:

    • Create, Add, Extract, Update, Remove files from a Zip file
      针对ZIP压缩文件创建、添加、抽出、更新和移除文件
    • Read/Write password protected Zip files
      (读写有密码保护的Zip文件)
    • Supports AES 128/256 Encryption
      (支持AES 128/256算法加密)
    • Supports Standard Zip Encryption
      (支持标准Zip算法加密)
    • Supports Zip64 format
      (支持zip64格式)
    • Supports Store (No Compression) and Deflate compression method
      (支持Store(非压缩)Deflate压缩方法---不太明白)
    • Create or extract files from Split Zip files (Ex: z01, z02,...zip)
      (针对分块zip文件创建和抽出文件)
    • Supports Unicode file names
      (支持Unicode编码文件名)
    • Progress Monitor
      (进度监控)

       从以上的主要特性可以看出,zip4j的功能是非常强大的,完全可以利用其写个类似于好压的zip文件管理软件。

    使用注意点:

    zip4j默认采用UTF-8编码,所以它支持中文,同时也支持密码,而且支持多种压缩算法,可以说功能强大,但使用起来却非常简单,当然,如果需求比较复杂,那就得好好去研究了。如果你仅仅是简单地解压一个zip压缩文件,那么只需要简单地几步即可:

    1. maven工程中加入依赖:

     

       <dependency>

           <groupId>net.lingala.zip4j</groupId>

           <artifactId>zip4j</artifactId>

           <version>1.3.2</version>

       </dependency>

    2.新建类UnZip.java:

    package com.test;

     

    import java.io.File; 

    import java.io.IOException; 

    import java.util.ArrayList;

    import java.util.List;

    import net.lingala.zip4j.core.ZipFile;

    import net.lingala.zip4j.exception.ZipException;

    import net.lingala.zip4j.model.FileHeader;

     

     

    public classUnZip {

      

       public static void main(String[] args) throws IOException{

         

          Stringsource="C:\\ygcl.zip";

          Stringdest="C:\\ygcl";

          Stringpassword="password";

          try {

             FilezipFile=new File(source);

                ZipFile zFile = new ZipFile(zipFile);  // 首先创建ZipFile指向磁盘上的.zip文件   

                zFile.setFileNameCharset("GBK");

                  File destDir = new File(dest);     // 解压目录   

                  if (zFile.isEncrypted()) {   

                      zFile.setPassword(password.toCharArray());  // 设置密码   

                  }

                  zFile.extractAll(dest);      // 将文件抽出到解压目录(解压)   

         

                 List<net.lingala.zip4j.model.FileHeader > headerList = zFile.getFileHeaders()

                  List<File> extractedFileList= newArrayList<File>(); 

                  for(FileHeader fileHeader : headerList) { 

                      if (!fileHeader.isDirectory()) { 

                          extractedFileList.add(new File(destDir,fileHeader.getFileName())); 

                      } 

                  } 

                  File [] extractedFiles = new File[extractedFileList.size()]; 

                 extractedFileList.toArray(extractedFiles); 

                 

                  for(File f:extractedFileList){

                    System.out.println(f.getAbsolutePath()+"....");

                  }

          }catch(ZipException e) {

             // TODO: handle exception

          } 

    }

    }

    1.2 使用ant依赖实现

    步骤:

    1.maven工程中引入依赖:

    <dependency>

                <groupId>ant</groupId>

                <artifactId>ant</artifactId>

                <version>1.6.5</version>

    </dependency>

    2. 新建UnZip.java:

    packagecom.test;

     

    importjava.io.File;

    importjava.io.FileOutputStream;

    importjava.io.IOException;

    importjava.io.InputStream;

    importjava.io.OutputStream;

    importjava.util.Enumeration;

    importorg.apache.tools.zip.ZipEntry;

    importorg.apache.tools.zip.ZipFile;

     

    publicclass UnZip {

     

             public static void main(String[] args)throws Exception {

                      

                       unZipFiles(newFile("C:\\ygcl.zip"),"C:\\ygcl\\");

             }

            

             public static void unZipFiles(FilezipFile,String descDir)throws IOException{ 

     

               File pathFile = new File(descDir); 

           if(!pathFile.exists()){ 

               pathFile.mkdirs(); 

           } 

           ZipFile zip = newZipFile(zipFile,"GBK"); 

           for(Enumeration entries =zip.getEntries();entries.hasMoreElements();){ 

               ZipEntry entry =(ZipEntry)entries.nextElement(); 

               String zipEntryName = entry.getName(); 

               InputStream in =zip.getInputStream(entry); 

               String outPath =(descDir+zipEntryName).replaceAll("\\*", "/");; 

               //判断路径是否存在,不存在则创建文件路径 

               File file = newFile(outPath.substring(0, outPath.lastIndexOf('/'))); 

               if(!file.exists()){ 

                   file.mkdirs(); 

               } 

               //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压 

               if(newFile(outPath).isDirectory()){ 

                   continue; 

               } 

               //输出文件路径信息 

               System.out.println(outPath); 

                

               OutputStream out = newFileOutputStream(outPath); 

               byte[] buf1 = new byte[1024]; 

               int len; 

              while((len=in.read(buf1))>0){ 

                   out.write(buf1,0,len); 

               } 

               in.close(); 

               out.close(); 

               } 

          System.out.println("******************解压完毕********************"); 

       } 

    }

    二.对rar文件的解压缩

    2.1 使用junrar依赖实现

    1.maven工程中加入依赖:

      <dependency>

                <groupId>com.github.junrar</groupId>

                <artifactId>junrar</artifactId>

                <version>0.7</version>

           </dependency>

    2.新建UnRar.java

    package com.test;

     

     

    import java.io.BufferedInputStream;

    import java.io.BufferedOutputStream;

    import java.io.File; 

    import java.io.FileInputStream;

    import java.io.FileOutputStream; 

     

     

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.OutputStream;

    import java.nio.charset.Charset;

    import java.util.Enumeration;

    import java.util.LinkedList;

    import java.util.regex.Matcher;

    import java.util.regex.Pattern;

     

     

     

    import com.github.junrar.Archive;

    import com.github.junrar.rarfile.FileHeader;

     

     

     /*

       * maven项目,添加依赖:

      *   <dependency>

               <groupId>com.github.junrar</groupId>

                <artifactId>junrar</artifactId>

                <version>0.7</version>

            </dependency>

      */

    public classUnRar{ 

      

       public static void main(String[] args) throws Exception{

          UnRar2u=new UnRar2();

          u.unrar("D:\\存放资料的压缩包\\员工材料.rar","D:\\存放资料的非压缩包\\");

       }

      

       public  void unrar(String srcRarPath,String dstDirectoryPath)throwsException { 

            if (!srcRarPath.toLowerCase().endsWith(".rar")) {

                 System.out.println("rar文件!");

                  return;

              }

              File dstDiretory = new File(dstDirectoryPath);

              if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹

                  dstDiretory.mkdirs();

              }

              File fol=null,out=null;

              Archive a = null;

              try {

                  a = new Archive(new File(srcRarPath));

                  if (a != null){

                      a.getMainHeader().print(); // 打印文件信息.

                      FileHeader fh = a.nextFileHeader();

                      while (fh != null){

                          if (fh.isDirectory()) { // 文件夹

                          // 如果是中文路径,调用getFileNameW()方法,否则调用getFileNameString()方法,还可以使用if(fh.isUnicode())

                          if(existZH(fh.getFileNameW())){

                             fol = new File(dstDirectoryPath + File.separator

                                          + fh.getFileNameW());

                          }else{

                              fol = new File(dstDirectoryPath + File.separator

                                          + fh.getFileNameString());

                          }

                           

                              fol.mkdirs();

                          } else { // 文件

                          if(existZH(fh.getFileNameW())){

                               out = new File(dstDirectoryPath + File.separator

                                          + fh.getFileNameW().trim());

                          }else{

                              out = new File(dstDirectoryPath + File.separator

                                          + fh.getFileNameString().trim());

                          }

                           

                              //System.out.println(out.getAbsolutePath());

                              try {// 之所以这么写try,是因为万一这里面有了异常,不影响继续解压.

                                  if (!out.exists()) {

                                      if (!out.getParentFile().exists()){// 相对路径可能多级,可能需要创建父目录.

                                          out.getParentFile().mkdirs();

                                      }

                                      out.createNewFile();

                                  }

                                  FileOutputStream os = new FileOutputStream(out);

                                  a.extractFile(fh, os);

                                  os.close();

                              } catch (Exception ex) {

                                  ex.printStackTrace();

                              }

                          }

                          fh = a.nextFileHeader();

                      }

                     a.close();

                  }

              } catch (Exception e) {

                  e.printStackTrace();

              }

         }

       

       /*

         * 判断是否是中文

         */

       publicstaticbooleanexistZH(String str){ 

            String regEx = "[\\u4e00-\\u9fa5]"

            Pattern p = Pattern.compile(regEx); 

            Matcher m = p.matcher(str); 

            while (m.find()) { 

                return true

            } 

            return false

       }

       

    }

     

    2.2 使用java.unrar-0.3.jar和commons-logging.jar实现

    1.项目引入java.unrar-0.3.jar和commons-logging.jar

    2.新建UnRar类:

    package a;

     

     

    import java.io.BufferedInputStream;

    import java.io.BufferedOutputStream;

    import java.io.File; 

    import java.io.FileInputStream;

    import java.io.FileOutputStream; 

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.OutputStream;

    import java.nio.charset.Charset;

    import java.util.Enumeration;

    import java.util.LinkedList;

    import java.util.regex.Matcher;

    import java.util.regex.Pattern;

    import de.innosystec.unrar.Archive; 

    import de.innosystec.unrar.rarfile.FileHeader; 

      /*

       * 需要引入java.unrar-0.3.jar和commons-logging.jar

       */

    public class UnRar{ 

      

       publicstatic void main(String[] args) throws Exception{

          UnRar2u=new UnRar2();

          u.unrar(newFile("D:\\存放资料的压缩包\\员工材料.rar"),newFile("D:\\存放资料的非压缩包\\"));

       }

      

       public  void unrar(File sourceRar,File destDir) throws Exception { 

           Archive archive = null; 

           FileOutputStream fos = null; 

           System.out.println("Starting..."); 

           try { 

               archive = new Archive(sourceRar); 

               FileHeader fh = archive.nextFileHeader(); 

               int count = 0; 

               File destFileName = null; 

               while (fh != null) { 

                  

                   

                   

                   String compressFileName=""; 

                   

                   System.out.println(fh.isUnicode());

                   // 判断文件路径是否有中文

                   if(existZH(fh.getFileNameW())){

                      System.out.println((++count) + ") "+ fh.getFileNameW());

                    compressFileName =fh.getFileNameW().trim(); 

                   }else{ 

                     System.out.println((++count) + ") "+ fh.getFileNameString());

                    compressFileName =fh.getFileNameString().trim();   

                   } 

     

                   destFileName = new File(destDir.getAbsolutePath() + "/" +compressFileName); 

                   if (fh.isDirectory()) { 

                        if (!destFileName.exists()){ 

                           destFileName.mkdirs(); 

                        } 

                        fh =archive.nextFileHeader(); 

                        continue; 

                   }  

                   if (!destFileName.getParentFile().exists()) { 

                       destFileName.getParentFile().mkdirs(); 

                    } 

                   fos = new FileOutputStream(destFileName); 

                   archive.extractFile(fh, fos); 

                   fos.close(); 

                   fos = null; 

                   fh = archive.nextFileHeader(); 

               } 

     

                archive.close(); 

               archive = null; 

               System.out.println("Finished !"); 

            }catch (Exception e) { 

               throw e; 

            }finally { 

               if (fos != null) { 

                   try { 

                        fos.close(); 

                        fos = null; 

                   } catch (Exception e) { 

                        //ignore 

                   } 

               } 

               if (archive != null) { 

                   try { 

                        archive.close();  

                        archive = null; 

                   } catch (Exception e) { 

                        //ignore 

                   } 

               } 

           } 

        }

        // 判断路径是否带中文

        publicstatic boolean existZH(String str) { 

           String regEx = "[\\u4e00-\\u9fa5]"; 

           Pattern p = Pattern.compile(regEx); 

           Matcher m = p.matcher(str); 

           while (m.find()) { 

               return true; 

           } 

           return false; 

        }

       

    }

     

     

     

     

     

     

        

     

     

    展开全文
  • 第一步:获取到上传的文件 @RequestMapping(value = "/xxx",produces = {"application/json;charset=UTF-8"}) public Response import(MultipartFile file) throws Exception {} 第二步:获取文件流 //...

    第一步:获取到上传的文件
    在这里插入图片描述

    @RequestMapping(value = "/xxx",produces = {"application/json;charset=UTF-8"})
        public Response import(MultipartFile file) throws Exception {}
    

    第二步:获取文件流

    //InputStream=file.getInputStream()
    public static Pair<Integer,Map<String,List<Object>>> importDataV2(InputStream in,List<String> readFileName){
            Map<String,List<Object>> map = new HashMap<>();
            //总数据条数
            int count = 0;
            ZipInputStream zin = new ZipInputStream(in);
            ZipEntry ze;
            try {
                //读取一个文件
                while((ze = zin.getNextEntry()) != null){
                    //为了防止用户导入时选择了错误的文件影响其他表的数据,做一层过滤
                    if(!readFileName.contains(ze.getName())){
                        log.warn("导入文件与接口不符,文件名:{}",ze.getName());
                        continue;
                    }
    
                    if(ze.isDirectory()){
                        //为空的文件夹什么都不做
                    }else{
                        BufferedReader br = new BufferedReader(new InputStreamReader(zin, StandardCharsets.UTF_8));
                        List<Object> list = new ArrayList<>();
                        int cnt = readCsvFileV2(br, ze.getName(),list);
                        count+=cnt;
                        //list里面就是组装好的对象list了
                        map.put(ze.getName(),list);
                    }
                }
                return Pair.of(count,map);
            }catch (HsjryException e){
                throw e;
            }catch (Exception e){
                e.printStackTrace();
                log.error(e,"importDataError");
            }finally {
                try{
                    zin.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
            return null;
        }
    

    第三步:读取每一行数据,并转化为对象

    1. 根据文件名判断对数据进行组装为对象
    private static int readCsvFileV2(BufferedReader br, String name,List<Object> list) {
            int count = 0;
            try {
                // 创建 CSV Reader 对象, 参数说明(读取的文件路径,分隔符,编码格式)
                CsvReader csvReader = new CsvReader(br);
                // 跳过表头
                csvReader.readHeaders();
                // 读取除表头外的内容,读取一行
                while (csvReader.readRecord()) {
                    // 读取一整行
                    String line = csvReader.getRawRecord();
                    //解密
                    line = Objects.equals(PropertiesConfig.needEncrypt,Boolean.TRUE) ? deciphering(line) : line;
                    count++;
                    //只切割双引号外面的逗号
                    String[] split = line.split(",(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)",-1);
                    String newVersion = VersionUtil.getNewVersion(null);
                    String newTechnologyVersion = VersionUtil.getNewTechnologyVersion(newVersion);
                    long longId = FtSequenceTool.nextLongId();
                    switch (name){
                        case FEATURES_COM_FILE_NAME:
                            buildFeaturesCom(longId, newVersion, newTechnologyVersion, split,list);
                            break;
                        default:
                            break;
                    }
                }
            } catch (HsjryException e) {
                throw e;
            } catch (Exception e) {
                //某一个文件出错,仅打印日志
                log.error(e,"读取文件{}出错",name);
            }
            return count;
        }
    
    1. 这里是一些默认属性的设置

    在这里插入图片描述
    3.将文件中的数据通过反射设置到对象上面

    /**
         * 对 object 进行属性设置
         * @param object
         * @param data
         * @param fields
         */
        public static void buildFiled(Object object, String[] data, String[] fields) {
    
                for (int i = 0; i < fields.length; i++)  {
                    try {
                        Field field = object.getClass().getDeclaredField(fields[i]);
                        field.setAccessible(true);
                        Class<?> type = field.getType();
                        String value = data[i];
                        if(NOT_NULL_FIELD.contains(field.getName()) && value==null){
                            throw new HsjryException("500","该列不允许为空");
                        }
    
                        if(value!=null && !"null".equals(value.replace("\"", "").trim())){
                            if(Objects.equals(type,String.class)){
                                if(value.length()>=2){
                                    if(value.indexOf("\"")==0){
                                        //去掉第一个 "
                                        value = value.substring(1,value.length());
                                    }
                                    if(value.lastIndexOf("\"")==(value.length()-1)){
                                        //去掉最后一个 "
                                        value = value.substring(0,value.length()-1);
                                    }
                                    //把两个双引号换成一个双引号
                                    value = value.replaceAll("\"\"","\"");
                                }
    
                                field.set(object,value.trim());
                            }else if(Objects.equals(type,Long.class) && !StringUtils.isEmpty(value)){
                                field.set(object,Long.parseLong(value.trim()));
                            }else if(Objects.equals(type,Integer.class) && !StringUtils.isEmpty(value)){
                                field.set(object,Integer.parseInt(value.trim()));
                            }else if(Objects.equals(type,java.util.Date.class)){
                                Date parse = format.parse(value);
                                field.set(object,parse);
                            }else if(Objects.equals(type,BigDecimal.class) && !StringUtils.isEmpty(value)){
                                field.set(object,new BigDecimal(value.trim()));
                            }else if(Objects.equals(type,Double.class) && !StringUtils.isEmpty(value)){
                                field.set(object,Double.parseDouble(value.trim()));
                            }else{
                                log.warn("未匹配到数据类型 类名:{},属性名:{},类型:{}",object.getClass().getSimpleName(),field.getName(),type.getSimpleName());
                            }
                        }
                    }catch (HsjryException e){
                        log.error(e,"不允许为空的列为空{}",object.getClass().getSimpleName());
                        throw e;
                    }catch (Exception e){
                        //一行数据失败,仅打印日志,不作任何处理
                        log.error(e,"组装数据行失败{}",object.getClass().getSimpleName());
                    }
                }
        }
    
    展开全文
  • JAVA 上传ZIP,RAR文件并解压

    热门讨论 2013-03-14 10:07:50
    java上传文件 实时获取上传进度 上传RAR,ZIP 并指定解压路劲 上传之后会按照路劲进行解压
  • * 生成压缩文件 (zip,rar 格式) */ public class CompressUtil { /** * @param path 要压缩的文件路径 * @param format 生成的格式(zip、rar)d */ public static void ...
  • java 多文件 压缩文件上传处理

    千次阅读 2019-04-12 17:17:57
    java 多文件 压缩文件上传处理 文章主要解决的有 压缩文件.zip .rar 的处理 和 .csv的处理 文章有多处 注释 均为博主按照自己公司的需求处理文件 所以注释掉大家也可以参照 环境为SpringMVC 主要为 后台处理...
  • Java从网络下载(获取)文件的小例子,Container container=getContentPane(); //得到容器  jtfUrl=new JTextField(18); //实例化地址输入框  jbGetFile=new JButton("取文件"); //实例化按钮  jlInfo=new ...
  • java读取网络zip中的json文件内容 public HashMap readData(String urlStr) throws IOException { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置超...
  • 代码如下: ...import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.CRC32; import java.util.zip.
  • 解决 Java 压缩文件中文乱码 引入maven依赖 <dependency> <groupId>ant</groupId> <artifactId>ant</artifactId> <version>1.6.5</version> </dependency>...
  • pom文件引入 <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.10.5</version> </dependency> 代码 public ...
  • 霍夫曼编码实现压缩文本文件,见文件huffman.rar. 对文件数据读写等功能已经实现,程序在Q2Resources.zip中。Q2Resources.zip中的文件禁止修改。请将TextZip.java文件所有未实现的函数按照要求给以实现
  • java解压linux上的压缩文件gz格式文件

    热门讨论 2011-03-24 01:22:24
    java解压linux上的压缩文件gz格式文件,各种方式解压缩
  • 读取指定压缩文件信息 package my; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class ZipInfo...
  • 今天,接到个任务,要求实现一个从压缩包中读取文件我就简单找了下,使用Java自带的工具类中的/** * 读取一个zip文件的内容,内容限定于字符文件 * @param srcPath */ public static void readFromZip(String ...
  • java-不解压rar文件直接提取压缩文件中的文件,或者解压也行。各路大侠知道的指点一下
  • java压缩压缩rar、zip文件

    千次阅读 2019-06-12 17:43:57
    来源https://www.open-open.com/lib/view/open1363592512046.html 被zip 折腾的要死,特意记录一下来,以后防翻车 package ... import java.io.BufferedInputStream; import java.io.Buff...
  • 当我们对一些需要用到的资料进行整理时,会发现文件的内存占用很大,不过是下载或者存储,都不是很方便,这时候我们会想到把文件变成zip格式,即进行压缩。在正式开始压缩和下载文件之前,我们可以先对zip的格式进行...
  • 找了很久的解决android(java也行)上zip、rar压缩文件解压缩的代码 ,在自己项目中试了很不错。
  • Java生成、修改文件夹和文件名,Java创建目录或文件夹,并修改、删除、重命名文件夹或文件名称,使用进行的文件操作实例。  super("目录和文件的创建、删除和更名"); //调用父类构造函数  jtfPath=new ...
  • Java实现文件下载Zip压缩

    千次阅读 2021-03-25 16:24:49
    目录 一、 概述 二、代码功能实现 一、 概述 开发过程中碰到一个需求,需要将服务器上的多个文件打包为... 从服务读取文件流放入Zip文件输出流 把临时文件Zip写入OutputStream 关闭资源 1. controller /** *

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,279
精华内容 2,511
关键字:

java读取rar压缩文件

java 订阅