2014-02-10 5 views
0

У меня есть список ссылок, которые указывают на местоположение репозитория сервера. Ссылки представляют собой некоторые ресурсы, которые содержат файлы изображений, xml, txt, csv (каждый из разных размеров), но проблема, с которой я сталкиваюсь, заключается в том, что когда i загружать файлы, все загруженные файлы имеют одинаковый размер файла.загрузка ресурсов из 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

Используйте BufferedInputStream вместо DataInputStream, который предназначен исключительно для объекта Java потоки.


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

Смежные вопросы