2017-09-09 3 views
0

내가하고있는 일은 웹 사이트에서 hdfs로 다운로드 할 수있는 zip 파일을 압축 해제하고 업로드하는 것입니다.원격 zip 파일의 압축을 풀고 java의 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); 

보시다시피, 나는의 InputStream에 URL을 변경 한 다음 내가 zipinputStream에서 항목을 얻을 ZipInputStream.Finally의 매개 변수로의 InputStream를 사용하는 대해서 openStream 방법을 사용 : 그리고 여기에 코드입니다. 그러나 문제는 getNextEntry 메서드가 null 값을 반환한다는 것입니다. 즉, 내 코드의 출력이 false, false, true입니다. 그리고 문제가있는 곳을 찾을 수 없습니다.

답변

0

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); 

} 
} 
+0

감사의 사람이이 정말 작품! –