2014-02-10 190 views
0

我有一个指向服务器存储库位置的链接列表,Links代表一些资源,包括图像,xml,txt,csv(每个不同大小)的文件,但是我面临的问题是,当我下载文件所有下载的文件具有相同的文件大小。从URL下载资源java

List<String> Links;//list of links dynamically populated 
for(String link:Links) 
{ 
    int i=link.lastIndexOf("/"); 
    String temp=link.substring(0, i); 
    String contentname = temp.substring(temp.lastIndexOf("/")+1); 
    String filePath = tempFolderPath + "\\" + contentname; 
    URL url = new URL(link); 
    URLConnection connection = url.openConnection(); 
    InputStream is = new DataInputStream(connection.getInputStream()); 
    FileOutputStream fos = null; 
    try { 
     fos = new FileOutputStream(new File(filePath)); 
     int inByte; 
     while((inByte = is.read()) != -1) 
      fos.write(inByte); 
     is.close(); 
     fos.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     try { 
      is.close(); 
      fos.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

其中链接直接访问的源泉“//localhost:8090/documents/11234/13935/abc.txt”

+0

下载的文件是什么?实际内容?别的东西? – jtahlborn

+0

如果我打开下载的图像类型jpg,png它不会打开和其他文件包含数据,但不完整的数据。 – Ali

+0

你是否收到异常? – jtahlborn

回答

-1

使用,而不是它仅用于Java对象一个DataInputStream一个的BufferedInputStream流。


InputStream is = connection.getInputStream(); 
FileOutputStream fos = null; 
try { 
    Files.copy(is, new File(filePath)); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

随着问题依然存在:

要下载HTML我做了一个额外的事情:我伪造是一个浏览器。

PrintWriter out = null; 
    try { 
     out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream(), 
       StandardCharsets.ISO_8859_1)), true); 
     // We use the standard for our own headers: Latin-1 and "\r\n". 

     // Set our own headers, gotten from Firefox TamperData plugin. 
     out.print("GET " + pageURL.getPath() + " HTTP/1.1\r\n"); 
     out.print("Host: " + pageURL.getHost() + "\r\n"); 
     out.print("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0\r\n"); 
     out.print("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"); 
     out.print("Accept-Language: eo,de-de;q=0.8,de;q=0.6,en-us;q=0.4,en;q=0.2\r\n"); 
     out.print("\r\n"); 
     out.flush(); 

最重要的是检查生成的文件。

+0

我也使用BufferedInputStream,但没有成功 – Ali

+0

,这将不会在read()方法的工作方式上有所不同。 – jtahlborn