[英]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.