2016-04-30 5 views
0

У меня есть класс java для загрузки файла с сервера, этот файл начинает загрузку, а также завершает загрузку, но не дает путь, где он сохраняется в локальной системе, или i подумайте, что не сохраните файл, пожалуйста, расскажите мне, как сохранить его в папке загрузки окна или в любой другой папке.Как сохранить загруженный файл с сервера в java

import java.io.*; 
    import java.net.*; 
    import java.util.*; 



    class Download extends Observable implements Runnable { 


    private static final int MAX_BUFFER_SIZE = 1024; 

    public static final String STATUSES[] = {"Downloading", 
     "Paused", "Complete", "Cancelled", "Error"}; 

    public static final int DOWNLOADING = 0; 
    public static final int PAUSED = 1; 
    public static final int COMPLETE = 2; 
    public static final int CANCELLED = 3; 
    public static final int ERROR = 4; 

    private final URL url; // download URL 
    private int size; // size of download in bytes 
    private int downloaded; // number of bytes downloaded 
    private int status; // current status of download 

    public Download(URL url) { 
     this.url = url; 
     size = -1; 
     downloaded = 0; 
     status = DOWNLOADING; 

     // Begin the download. 
     download(); 
    } 

    public String getUrl() { 
     return url.toString(); 
    } 

    public int getSize() { 
     return size; 
    } 

    public float getProgress() { 
     return ((float) downloaded/size) * 100; 
    } 

    public int getStatus() { 
     return status; 
    } 

    public void pause() { 
     status = PAUSED; 
     stateChanged(); 
    } 

    public void resume() { 
     status = DOWNLOADING; 
     stateChanged(); 
     download(); 
    } 

    public void cancel() { 
     status = CANCELLED; 
     stateChanged(); 
    } 

    private void error() { 
     status = ERROR; 
     stateChanged(); 
    } 

    private void download() { 
     Thread thread = new Thread(this); 
     thread.start(); 
    } 

    private String getFileName(URL url) { 
     String fileName = url.getFile(); 
     return fileName.substring(fileName.lastIndexOf('/') + 1); 
    } 

    public void run() { 
     RandomAccessFile file = null; 
     InputStream stream = null; 

     try { 
      // Open connection to URL. 
      HttpURLConnection connection 
        = (HttpURLConnection) url.openConnection(); 

      // Specify what portion of file to download. 
      connection.setRequestProperty("Range", 
        "bytes=" + downloaded + "-"); 

      // Connect to server. 
      connection.connect(); 

      // Make sure response code is in the 200 range. 
      if (connection.getResponseCode()/100 != 2) { 
       error(); 
      } 

      // Check for valid content length. 
      int contentLength = connection.getContentLength(); 
      if (contentLength < 1) { 
       error(); 
      } 

      /* Set the size for this download if it 
    hasn't been already set. */ 
      if (size == -1) { 
       size = contentLength; 
       stateChanged(); 
      } 

      // Open file and seek to the end of it. 
      file = new RandomAccessFile(getFileName(url), "rw"); 
      file.seek(downloaded); 

      stream = connection.getInputStream(); 
      while (status == DOWNLOADING) { 
       /* Size buffer according to how much of the 
     file is left to download. */ 
       byte buffer[]; 
       if (size - downloaded > MAX_BUFFER_SIZE) { 
        buffer = new byte[MAX_BUFFER_SIZE]; 
       } else { 
        buffer = new byte[size - downloaded]; 
       } 

       // Read from server into buffer. 
       int read = stream.read(buffer); 
       if (read == -1) { 
        break; 
       } 

       // Write buffer to file. 
       file.write(buffer, 0, read); 
       downloaded += read; 
       stateChanged(); 
      } 


      /* Change status to complete if this point was 
    reached because downloading has finished. */ 
      if (status == DOWNLOADING) { 
       status = COMPLETE; 
       stateChanged(); 
       System.err.println("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"); 
      } 
     } catch (Exception e) { 
      error(); 
     } finally { 
      // Close file. 
      if (file != null) { 
       try { 
        file.close(); 
       } catch (Exception e) { 
       } 
      } 

      // Close connection to server. 
      if (stream != null) { 
       try { 
        stream.close(); 
       } catch (Exception e) { 
       } 
      } 
     } 
    } 

// Notify observers that this download's status has changed. 
    private void stateChanged() { 
     setChanged(); 
     notifyObservers(); 
    } 
} 

ответ

0

При создании RandomAccessFile(), первый параметр это имя и местоположение файла. Попробуйте распечатать absolutePath() и посмотреть, где находится этот файл.

+0

не могли бы вы рассказать мне, где я должен поставить этот код? – gurjeet

+0

Попробуйте создать новый RandomAccessFile («c: \\ temp \\ myfile.txt», «RW»), тогда загруженный контент должен быть записан в этот файл на основе исходного кода. Я вижу, что вы пытались сопоставить имя файла с URL-адресом. Поэтому, если это так, файл следует сохранить в том месте, где вы запускаете приложение. Опять же, вызов file.getAbsolutePath() должен показать местоположение файла. –

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