Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Копирование удалённого файла


Автор: StormDK 20.4.2007, 23:38
Из-за неопытности программирования на Яве, имеется вопрос:
нужно скопировать некий фаил (возможно пару гигабайт весу) из интернета на диск. 
Был получен простейший код, который не работает ))), вернее, работает но плохо. Текстовые файлы, вроде как ещё качает, а вот, например, картику - тоже качает, но она получается искажённой, вообщем, что-то не то.
Так вот как правильно это сделать?!

Код

    File newF = new File("logo.jpg"); // Копируем в корневую дирректорию в этот фаил
    if(!newF.createNewFile()) throw new IOException();
    BufferedWriter wr = new BufferedWriter(new FileWriter(newF));
        
    URL url = new URL("http://mcomm.ru/pics/logo.jpg");
    URLConnection yc = url.openConnection();
         BufferedReader in = new BufferedReader( new InputStreamReader( yc.getInputStream()));
        
        int r;
        while ((r = in.read()) > -1)
        {
            wr.write(r);
        }
                
        in.close();
        wr.close();

Автор: kkorsakoff 21.4.2007, 00:46
Вместо Reader и Writer надо использовать соответствующие InputStream и OutputStream. Они предназначены для передачи бинарных потоков, в то время как Reader/Writer - символьных.

Автор: LSD 21.4.2007, 14:26
Код
File newF = new File("logo.jpg");// Копируем в корневую дирректорию в этот фаил
FileOutputStream out = new FileOutputStream(newF);
URL url = new URL("http://mcomm.ru/pics/logo.jpg");
URLConnection uc = url.openConnection();
InputStream in = uc.getInputStream();
byte[] buffer = new byte[256 * 1024];
int read;
while((read = in.read(buffer)) != -1)
  out.write(buffer, 0, read);
in.close();
out.close();

Автор: StormDK 21.4.2007, 23:47
Цитата(LSD @ 21.4.2007,  14:26)
Код
File newF = new File("logo.jpg");// Копируем в корневую дирректорию в этот фаил
FileOutputStream out = new FileOutputStream(newF);
URL url = new URL("http://mcomm.ru/pics/logo.jpg");
URLConnection uc = url.openConnection();
InputStream in = uc.getInputStream();
byte[] buffer = new byte[256 * 1024];
int read;
while((read = in.read(buffer)) != -1)
  out.write(buffer, 0, read);
in.close();
out.close();

Да. Это 5.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)