자바 http 에서 되 돌려 달라 고 요청 한 zip 흐름 의 파일 및 기타 읽 기 동작 을 직접 읽 습 니 다.

4360 단어 잡기자바
항상 이상 한 수요 가 있 습 니 다. 이것 은 바로 내부 방문 이 었 습 니 다. HTTP 방식 으로 zip 흐름 을 되 돌려 야 합 니 다. 해석 할 수 밖 에 없 었 습 니 다. 자바 로 스 트림 에 있 는 CSV 파일 을 읽 으 면 좋 겠 습 니 다. 이것 에 대해 잘 모 르 겠 습 니 다. 인터넷 에서 코드 를 찾 았 습 니 다. 대충 알 아 보고 demo 를 써 서 기록 해 보 았 습 니 다.다 시 는 찾기 힘 들 지 않도록.
	// HTTP  conn     zip      CSV  
	private static List getListFromZipStream(HttpURLConnection conn) throws IOException {
        BufferedInputStream bis = null;
        ZipInputStream zin = null;
        try {
            //       
            bis = new BufferedInputStream(conn.getInputStream());
            zin = new ZipInputStream(bis);

			List list = new ArrayList<>();
			//           
            while ((zin.getNextEntry()) != null) {
                CsvReader csvReader = new CsvReader(zin, Charset.forName("gbk"));
				csvReader.readHeaders();
                 while (csvReader.readRecord()) {
					//     
					String outerOrderIdStr = csvReader.get(0);
					list.add(withdrawRecord);
			}
            }
            return list;
        } catch (Exception e) {
            LogTypeEnum.EXCEPTION.error(e, "        ");
        } finally {
            if (bis != null) {
                bis.close();
            }
            if (zin != null) {
                zin.close();
            }
        }
        return null;
    }

안에 일부 코드 는 제 가 수 동 으로 고 쳤 습 니 다. 이상 한 문제 가 발생 하면 스스로 처리 하면 됩 니 다. 이것 은 데 이 터 를 직접 읽 는 것 입 니 다. 물론 CSV 파일 을 직접 출력 하 는 것 도 간단 합 니 다. outputstream 출력 을 정의 하면 됩 니 다. 코드 는 다음 과 같 습 니 다.
 /**
	  http    zip        csv        
     * @param conn
     * @throws IOException
     */
    private static void downloadFileFromZipStream(HttpURLConnection conn) throws IOException {
        BufferedInputStream bis = null;
        ZipInputStream zin = null;
        int len;
        byte[] buf = new byte[1024];
		//         ,      ,             
        FileOutputStream fos = new FileOutputStream("D:\\zipTest\\folder\\     .csv");
        try {
            //       
            bis = new BufferedInputStream(conn.getInputStream());
            zin = new ZipInputStream(bis);
            while ((zin.getNextEntry()) != null) {
                while ((len = zin.read(buf)) != -1) {
                    fos.write(buf, 0, len);
                }
            }
            //     ,       
            return ;
        } catch (Exception e) {
            
        } finally {
            if (bis != null) {
                bis.close();
            }
            if (zin != null) {
                zin.close();
            }
            fos.close();
        }
        return ;
    }
	

 
zip 파일 을 읽 고 출력 할 로 컬 demo 를 첨부 합 니 다.
 public static void main(String[] args) {

        try {
            //       zip       
            String zipFilePath = "D:\\zip\\11.zip";
            //        
            String destDirPath = "D:\\    \\test";
            ZipFile zipFile = new ZipFile(new File(zipFilePath));
            //  zip    
            Enumeration entries = zipFile.entries();
            InputStream is;
            while (entries.hasMoreElements()) {
                ZipEntry entry = (ZipEntry) entries.nextElement();
                //      ,        ,   io    copy  
                File targetFile = new File(destDirPath + "/" + entry.getName());
                //                 
                if (!targetFile.getParentFile().exists()) {
                    targetFile.getParentFile().mkdirs();
                }
                is = zipFile.getInputStream(entry);
                FileOutputStream fos = new FileOutputStream(targetFile);
                int len;
                byte[] buf = new byte[1024];
                while ((len = is.read(buf)) != -1) {
                    fos.write(buf, 0, len);
                }
                //     ,       
                fos.close();
                is.close();
            }
            //        
        } catch (IOException e) {

        } finally {
        }

    }

다음 에 어 리 석 지 않 게 코드 가 통 하지 않도록 기억 하 세 요. 어떤 작은 문 제 는 제 가 notepad 탈 민 으로 복사 한 가능성 입 니 다.
몇 편의 문장 을 참고 했다.
https://blog.csdn.net/qq_34474324/article/details/97369763
http://blog.sina.com.cn/s/blog_b31d573d0101htil.html
https://www.jianshu.com/p/f891b135da88

좋은 웹페이지 즐겨찾기