java小程序HTTP下载文件无法工作

java小程序HTTP下载文件无法工作,java,applet,Java,Applet,我编写了一个简单的小程序从HTTP URL下载文件。 在Eclipse或Netbeans中,它运行良好,可以将文件下载到硬盘上的d://abc//123.iso。 这是我的代码: public class download { public static void saveUrl(final String filename, final String urlString) throws MalformedURLException, IOException { Buffer

我编写了一个简单的小程序从HTTP URL下载文件。 在Eclipse或Netbeans中,它运行良好,可以将文件下载到硬盘上的d://abc//123.iso。 这是我的代码:

public class download {
public static void saveUrl(final String filename, final String urlString)
        throws MalformedURLException, IOException {
    BufferedInputStream in = null;
    FileOutputStream fout = null;
    try {
        in = new BufferedInputStream(new URL(urlString).openStream());
        fout = new FileOutputStream(filename,true);

        final byte data[] = new byte[1024];
        int count;
            fout.write(data, 0, count);

    } finally {
        if (in != null) {
            in.close();
        }
        if (fout != null) {
            fout.close();
        }
    }
}
}

==========================

但当导出到jar文件并使用html运行时,浏览器可以在我的硬盘上创建新文件123.iso,但该文件的大小始终为2kbps。我想它不会下载任何东西。 请帮帮我 非常感谢
P/s:我尝试使用jarsigner对jar文件进行签名,但这并不能解决问题

您在输入中第一次读取时正在写入一个jar文件。您需要写入文件,直到输入为空

在编写代码时尝试此操作

当count=in.readdata!=-1 { fout.writedata,0,计数; ... }

尽管我对上面的代码表示怀疑,因为它根本无法完成发布的任何操作,即使是编译,我还是使用以下解决方案来自动下载大于100 MB的大型文件:

            HttpGet httpGet;
            RequestConfig requestConfig;
            getProxySettings();

            //Check to see if there is a proxy availabble. 
            if (!LicensePreloader.proxyAddr.equals("")) {
                requestConfig = RequestConfig.custom()
                        .setSocketTimeout(5000)
                        .setConnectTimeout(5000)
                        .setConnectionRequestTimeout(5000)
                        .setProxy(new HttpHost(LicensePreloader.proxyAddr, LicensePreloader.proxyPort))
                        .build();

            } else {
                //No proxy was available, just use regular internet. 
                requestConfig = RequestConfig.custom()
                        .setSocketTimeout(5000)
                        .setConnectTimeout(5000)
                        .setConnectionRequestTimeout(5000)
                        .build();
            }
            httpGet = new HttpGet(this.remoteUrl);
            HttpResponse response;
            InputStream remoteContentStream = null;
            OutputStream localFileStream = null;
            try {
                httpGet.setConfig(requestConfig);
                response = httpClient.execute(httpGet);

                //This builds the content of our file we're downloading. 
                remoteContentStream = response.getEntity().getContent();
                long fileSize = response.getEntity().getContentLength();
                File dir = localFile.getParentFile();
                dir.mkdirs();

                localFileStream = new FileOutputStream(localFile);
                //Set the buffer, in our use case, it's always the deafult 8192 bytes.
                byte[] buffer = new byte[bufferSize];
                int sizeOfChunk;
                int amountComplete = 0;
                //Simply loop through and download the file in 'chunks' 
                while ((sizeOfChunk = remoteContentStream.read(buffer)) != -1) {
                    localFileStream.write(buffer, 0, sizeOfChunk);
                    amountComplete += sizeOfChunk;
                    updateProgress(amountComplete, fileSize);

                }
                return localFile;
            } finally {
                //Make sure to clean everything up. 
                try {
                    if (remoteContentStream != null) {
                        remoteContentStream.close();
                    }
                    if (localFileStream != null) {
                        localFileStream.close();
                    }
                } catch (IOException ex) {
                    //If we're here, it's likely because the internet conneciton
                    //couldn't be established, or it was cut short in the middle. 
                    ex.printStackTrace(System.out);
                    failed();
                }
            }
        }
对于您的应用程序来说,这显然是过度的,您可能会忘记所有代理业务,但为了完整性起见,我将其保留在那里。我没有包括几个helper方法,但它们几乎都是专门用于代理处理的


祝你好运

你在不读的情况下写,直到EOF才循环,你测量文件大小(以Kbps千位每秒为单位),你在小程序的绘制方法中进行I/O?您使用count而不初始化它,因此此代码甚至不会编译。谢谢您的回答。我试过了,但解决不了问题。谢谢你的帮助。我想你是对的。之后尝试另一个下载链接
            HttpGet httpGet;
            RequestConfig requestConfig;
            getProxySettings();

            //Check to see if there is a proxy availabble. 
            if (!LicensePreloader.proxyAddr.equals("")) {
                requestConfig = RequestConfig.custom()
                        .setSocketTimeout(5000)
                        .setConnectTimeout(5000)
                        .setConnectionRequestTimeout(5000)
                        .setProxy(new HttpHost(LicensePreloader.proxyAddr, LicensePreloader.proxyPort))
                        .build();

            } else {
                //No proxy was available, just use regular internet. 
                requestConfig = RequestConfig.custom()
                        .setSocketTimeout(5000)
                        .setConnectTimeout(5000)
                        .setConnectionRequestTimeout(5000)
                        .build();
            }
            httpGet = new HttpGet(this.remoteUrl);
            HttpResponse response;
            InputStream remoteContentStream = null;
            OutputStream localFileStream = null;
            try {
                httpGet.setConfig(requestConfig);
                response = httpClient.execute(httpGet);

                //This builds the content of our file we're downloading. 
                remoteContentStream = response.getEntity().getContent();
                long fileSize = response.getEntity().getContentLength();
                File dir = localFile.getParentFile();
                dir.mkdirs();

                localFileStream = new FileOutputStream(localFile);
                //Set the buffer, in our use case, it's always the deafult 8192 bytes.
                byte[] buffer = new byte[bufferSize];
                int sizeOfChunk;
                int amountComplete = 0;
                //Simply loop through and download the file in 'chunks' 
                while ((sizeOfChunk = remoteContentStream.read(buffer)) != -1) {
                    localFileStream.write(buffer, 0, sizeOfChunk);
                    amountComplete += sizeOfChunk;
                    updateProgress(amountComplete, fileSize);

                }
                return localFile;
            } finally {
                //Make sure to clean everything up. 
                try {
                    if (remoteContentStream != null) {
                        remoteContentStream.close();
                    }
                    if (localFileStream != null) {
                        localFileStream.close();
                    }
                } catch (IOException ex) {
                    //If we're here, it's likely because the internet conneciton
                    //couldn't be established, or it was cut short in the middle. 
                    ex.printStackTrace(System.out);
                    failed();
                }
            }
        }