package tiptopTool; import java.net.MalformedURLException; import java.net.URL; import java.net.HttpURLConnection; import java.net.URLConnection; import java.io.*; import java.util.Observable; import java.util.Observer; /** * Created by IntelliJ IDEA. * User: Igor * Date: 11.12.2005 * Time: 13:45:51 * To change this template use File | Settings | File Templates. */ // This class downloads a file from a URL. public class Download2 extends Observable implements Runnable { // Max size of download buffer. private static final int MAX_BUFFER_SIZE = 1024; // These are the status names. public static final String STATUSES[] = {"Загрузка", "Пауза", "Завершенно", "Отменено", "Ошыбка"}; // These are the status codes. public static final int DOWNLOADING = 0; public static final int PAUSED = 10; public static final int COMPLETE = 2; public static final int CANCELLED = 3; public static final int ERROR = 4; public static URL urla; public URL url; // download URL //bylo private public String fileName; //путь к файлу public String description=""; private int size; // size of download in bytes private int downloaded; // number of bytes downloaded private int status; // current status of download private byte buffer[];//if save in the buffer // Constructor for Download. public int getDownloaded() { return downloaded; } public Download2(URL url,String fileName) { this.url = url; this.fileName=fileName; size = -1; downloaded = 0; status = DOWNLOADING; } // Get this download's URL. public String getUrl() { return url.toString(); } // Get this download's size. public int getSize() { return size; } // Get this download's progress. public float getProgress() { return ((float) downloaded / size) * 100; } // Get this download's status. public int getStatus() { return status; } // Pause this download. public void pause() { status = PAUSED; stateChanged(); } // Resume this download. public void resume() { status = DOWNLOADING; stateChanged(); download(); } // Cancel this download. public void cancel() { status = CANCELLED; stateChanged(); } // Mark this download as having an error. private void error() { status = ERROR; stateChanged(); } // Start or resume downloading. public void download() { Thread thread = new Thread(this); thread.start(); } // Download public void run() { //System.out.println("run"); RandomAccessFile file = null; InputStream stream = null; try { HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("Range","bytes=" + downloaded + "-");// Specify what portion of file to download. // Connect to server. connection.connect(); //System.out.println("connection to " + connection.getContentType()+" ResponseCode " + connection.getResponseCode()); if (connection.getResponseCode() / 100 != 2) // провери отве севера { error(); } // Connect to server. //connection.connect(); //System.out.println(connection.getHeaderField(0).toString()); //System.out.println("Тип пакета = " + connection.getContentType()); //System.out.println("Заголовок = " + connection.getHeaderField(1)); //System.out.println("Класс " + connection.toString()); //System.out.println("Код ответа " + connection.getResponseCode()); // Check for valid content length. int contentLength = connection.getContentLength(); //System.out.println("Размер загружаемого файла =" + contentLength); 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. if (!fileName.isEmpty()) { file = new RandomAccessFile(fileName, "rw"); file.seek(downloaded); } if (fileName.isEmpty()) //фаил не задан сохраняем в буфер { this.buffer = new byte[size]; } stream = connection.getInputStream(); while (status == DOWNLOADING) { if (!fileName.isEmpty()) //если сохраняем в фаил { 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; } if (fileName.isEmpty()) //если сохраняем в буфер { 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 small buffer to big buffer. for(int i=downloaded;i