簡體   English   中英

提取遠程zip文件並將其解壓縮到Java中的hdfs

[英]Extract a remote zip file and unzip it to a hdfs in java

我正在做的只是解壓縮並上傳一個zip文件,該文件可以從網站下載到hdfs。 這是代碼:

String src="http://corpus.byu.edu/wikitext-samples/text.zip";
String dst = "hdfs://cshadoop1/user/hxy162130/assignment1";
InputStream a = new URL(src).openStream();
System.out.println(a == null);
ZipInputStream in = new ZipInputStream(a);
System.out.println(in == null);
ZipEntry zE = in.getNextEntry();        
System.out.println(zE == null);

如您所見,我使用openStream方法將url更改為inputstream,然后將inputstream用作ZipInputStream的參數。最后我從zipinputStream獲得了一個條目。 但是問題是getNextEntry方法返回一個空值,這意味着我的代碼輸出為false,false,true。 而且我只是找不到問題所在。

http://corpus.byu.edu/wikitext-samples/text.zip的HTTP請求導致301 Moved Permanently給出新Location: https://corpus.byu.edu/wikitext-samples/text.zip 因此,使用此URL不再有可用的ZIP資源。

要遵循重定向,您可以執行以下操作:

import java.net.URL;
import java.net.URLConnection;
import java.io.InputStream;
import java.util.zip.*;


class ReadZipInputStream {

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

  String src="http://corpus.byu.edu/wikitext-samples/text.zip";
  //301 Moved Permanently: Location:https://corpus.byu.edu/wikitext-samples/text.zip

  URL url = new URL(src);
  URLConnection connection = url.openConnection();
  String redirect = connection.getHeaderField("Location");
  if (redirect != null){
   connection = new URL(redirect).openConnection();
  }

  InputStream a = connection.getInputStream();
  System.out.println(a);

  ZipInputStream in = new ZipInputStream(a);
  System.out.println(in);

  ZipEntry zE = in.getNextEntry();        
  System.out.println(zE);

 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM