Avatar billede eosfae Nybegynder
01. december 2008 - 10:42 Der er 4 kommentarer

Fil download - timeout

Hejsa

Jeg har et program i JAVA, som er sat til at downloade filer over nettet. Den del af koden der får ting til at ske er sådan ud:

                URL fileUrl = null;
        byte[] buf;
        int ByteRead, ByteWritten = 0;

        fileUrl = new URL(fileAddress);

        os = new BufferedOutputStream(new FileOutputStream(destinationDir
                    + "\\" + localFileName));
            URLConn = (HttpURLConnection) fileUrl.openConnection();

        if (URLConn.getResponseCode() == 200) {
            is = URLConn.getInputStream();

            buf = new byte[size];

            while ((ByteRead = is.read(buf)) != -1) {
                os.write(buf, 0, ByteRead);
                ByteWritten += ByteRead;
            }

Det umiddelbare problem er blot, at nogle gange vil programmet have fat i en fil, som den bare ikke kan downloade af en eller anden årsag. Sådanne filer medfører, at programmet står i stampe og forsøger på at downloade, uden at der sker noget. Et eksempel er denne fil: http://www.madison.sandi.net/rrunyan/AP%20Psych/Coons/Coon_PPT/Coon_01.ppt

Mit spørgsmål er så, om der findes noget smart som gør, at man kan finde ud af på forhånd, om en fil kan downloades, eller er den rette løsning blot at sætte en timer på, som kan interrupte det ufuldstændige download, og forsatte med næste fil?
Avatar billede schwarz84 Nybegynder
01. december 2008 - 11:10 #1
URLConnection har en setConnectionTimeout og en setReadTimeout metode som du kan bruge. Hvis disse timeouts overskrides, så kastes en SocketTimeoutException som du kan catche...
Avatar billede eosfae Nybegynder
01. december 2008 - 11:21 #2
Det er rigtig nok, men så opstår der jo et problem, hvis man har fat i en rigtig stor fil. Hvis timeout bliver sat for lille, så vil det gå ud over et download, som måske tager nogle minutter. Er der en smart måde at finde ud af, om et download 'lever'? Findes der en eller anden 'isAlive' metode, eller skal jeg bare checke om min ByteWritten variable vokser?!?
Avatar billede arne_v Ekspert
01. december 2008 - 15:58 #3
Jeg vil tro at setReadTimeout er for hver read d.v.s. store filer som tager lang tid skulle
ikke vaere et problem.
Avatar billede schwarz84 Nybegynder
02. december 2008 - 14:32 #4
Read timeout er som arne_v skriver den maksimale tid der går mellem to stumper af filen kan hentes. Den er derfor uafhængig af filens størrelse. Det er ret tydeligt forklaret i APIen:
http://java.sun.com/javase/6/docs/api/java/net/URLConnection.html#setReadTimeout(int)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester