при запросе загрузки файл остается на 0 байтов?

1

Привет, я написал код для загрузки файла и поместил его на рабочий стол.

но всякий раз, когда он начинает загружаться, он просто остается в 0 байтах, почему?

здесь мой код:

    private void addToDesktop() throws IOException {

    URL url = new URL("theurl");
    URLConnection connection = url.openConnection();
    InputStream inputstream = connection.getInputStream();
    FileSystemView filesys = FileSystemView.getFileSystemView();
    filesys.getHomeDirectory();
    BufferedOutputStream bufferedoutputstream = new BufferedOutputStream(new FileOutputStream(new File(filesys.getHomeDirectory() + "/client2.jar")));
    byte[] buffer = new byte[1024];
    int bytesRead = 0;

    while(bytesRead == inputstream.read(buffer))
    {
        bufferedoutputstream.write(buffer, 0 ,1000);
    }
    bufferedoutputstream.flush();
    bufferedoutputstream.close();
    inputstream.close();
}
Теги:
buffer

2 ответа

0

Согласно JavaDoc, read(byte[] buffer) возвращает количество прочитанных байтов. Если больше нет байтов для чтения, возвращается -1.

Кажется, что проблема здесь: while(bytesRead == inputstream.read(buffer)). Так как bytesRead будет иметь значение 0, то метод .read даст 1024. Изменение его на что-то вроде этого должно работать: while(inputstream.read(buffer) != -1)

0

У тебя есть:

int bytesRead = 0;

while(bytesRead == inputstream.read(buffer))
{
   ...
}

Это эквивалентно:

while(0 == inputstream.read(buffer))
{
   ...
}

Это условие будет вообще ложным, и цикл никогда не будет выполняться. Вы, вероятно, имели в виду нечто большее:

int bytesRead;

while((bytesRead = inputstream.read(buffer)) > 0)
{
   ...
}

Мораль здесь: Mind your = vs. == в этих типах утверждений.


Кстати: вы пишете 1000 байтов в выходной файл каждый раз через цикл, независимо от того, сколько байтов было прочитано. Вы просто хотите писать то, что было прочитано (иногда read() может не читать полный буфер, особенно в конце файла, если буфер больше остальных данных). Вы хотите сделать это вместо этого:

while((bytesRead = inputstream.read(buffer)) > 0)
{ 
    bufferedoutputstream.write(buffer, 0, bytesRead);
}
  • 0
    это все еще не работает, все еще 0 байтов: c
  • 0
    @Boolena Ваш URL действительно "theurl" ...? Если так, то это наверняка объяснит. Попробуйте добавить некоторые временные распечатки в ваш код, чтобы проследить, что происходит (например, в цикле для печати количества байтов, прочитанных каждый раз, и т. Д.).
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню