0

これは私のコードです。

while ((count = in.read(data, 0, 16384)) != -1) // while there is still data from link to be read
{   
    download.removeMouseListener(m);
    /*speed.setText(String.valueOf(count));*/
    if (time >= time2 ){ // every second , set kb/s
        long initTimeInSeconds = initTime/1000000000;
        long currentTimeInSeconds = time/1000000000;
        speed.setText(String.valueOf((fout.getChannel().size() / 1024) / (currentTimeInSeconds-initTimeInSeconds) + "KB/s")); // set kb/s
        time2 = System.nanoTime() + 1000000000;
    }

    progress.setValue((int) fout.getChannel().size());//update progress bar
    fout.write(data, 0, count); // write the data to the file
    time = System.nanoTime();
} 

基本的に、ダウンロード コードは次のとおりです。

while ((count = in.read(data, 0, 16384)) != -1) // while there is still data from link to be read
{   
    fout.write(data, 0, count); // write the data to the file
    time = System.nanoTime();
} 

どこ

byte data[] = new byte[16384];
BufferedInputStream in = null;
in = new BufferedInputStream(url.openStream());
int count = 0;

どういうわけか、このコードは特定のファイル、たとえばこのファイルをダウンロードしていません。 http://nmap.org/dist/nmap-6.40-setup.exe

while ループは開始時に停止し、2 回読み取り、完全に停止します。

誰でも理由を説明できますか?

4

2 に答える 2

2

このコードは私にとってはうまく機能します。以下のコードは、ファイルをダウンロードしてディスクに書き込みます。

            URL url = new URL("http://nmap.org/dist/nmap-6.40-setup.exe");
    url.openConnection();
    byte data[] = new byte[16384];
    BufferedInputStream in = null;
    in = new BufferedInputStream(url.openStream());
    int count = 0;
    OutputStream fout =  new FileOutputStream("C:/test.exe");
    while ((count = in.read(data, 0, 16384)) != -1) // while there is still data from link to be read
    {   
        fout.write(data, 0, count); // write the data to the file
        long time = System.nanoTime();
        System.out.println(time);
    } 
    fout.flush();
    fout.close();

出力ストリームが適切に閉じられていない場合にのみ、考えられる失敗が1つあります。ファイルがディスクにフラッシュされない可能性があります。

于 2013-08-02T04:49:48.033 に答える