当前位置: 首页 > 面试题库 >

无法从Java中的URL下载文件

葛勇锐
2023-03-14
问题内容

我正在制作一个将从URL下载文件的程序。总会开始下载,但未完成。例如,如果文件大小为3
MB,则程序仅下载文件大小的一半,因此我无法打开下载的文件。但是程序说文件成功下载了。

public class FileDownloader {

    public static void main (String [] args) throws IOException {

        InputStream fileIn;
        FileOutputStream fileOut;
        Scanner s = new Scanner(System.in);

        System.out.println("Enter URL: ");
        String urlStr = s.nextLine();

        URL url = new URL(urlStr);
        URLConnection urlConnect = url.openConnection();
        fileIn = urlConnect.getInputStream();

        System.out.println("Enter file name: ");
        String fileStr = s.nextLine();
        fileOut = new FileOutputStream(fileStr);

        while (fileIn.read() != -1) {   
            fileOut.write(fileIn.read());
        }
        System.out.println("File is downloaded");
    }
}

那么我该如何解决呢?应该使用其他方式下载吗?


问题答案:

byte由于

    while (fileIn.read() != -1) {     //1st read
        fileOut.write(fileIn.read());     //2nd read - 1st write
    }

您正在阅读两次,只写一次。

您需要做的是

    int x;
    while ((x = fileIn.read()) != -1) {   //1st read
        fileOut.write(x);     //1st write
    }

这是您的完整代码

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;

public class FileDownloader {

    public static void main(String[] args) throws IOException {

        InputStream fileIn;
        FileOutputStream fileOut;
        Scanner s = new Scanner(System.in);

        System.out.println("Enter URL: ");
        String urlStr = s.nextLine();

        URL url = new URL(urlStr);
        URLConnection urlConnect = url.openConnection();
        fileIn = urlConnect.getInputStream();

        System.out.println("Enter file name: ");
        String fileStr = s.nextLine();
        fileOut = new FileOutputStream(fileStr);

        int x;
        while ((x = fileIn.read()) != -1) {
            fileOut.write(x);
        }
        System.out.println("File is downloaded");

}


 类似资料:
  • 我的python3代码: 它将内容保存在metadat.pdf但那不是pdf的真正内容,它是这个html页面: 任何帮助,我如何才能保存文件的真实内容,而不是这个html?它应该是真正的pdf,当我下载它是jsut这个html页面 更新: 当我使用Python会话时,从服务器的一个NSWER:

  • 大约一个小时后,我无法通过下载URL属性检索文件内容。

  • 我们正计划在google drive上开设一个公司账户,只对公司员工开放。 问题是我们想把几个文件放在我们的驱动器上,并以编程方式下载它们。我们尝试使用google drive API,但下载速度非常低。 是否有任何方法可以使用wget和凭据,从而允许通过URL下载文件。 我们的典型文件大小为50GB。

  • 问题内容: 我正在尝试使用setRequestProperty(“ Range”,“ bytes =” + startbytes +“-” + endbytes);给定下载URL来下载文件的一部分。以下代码片段显示了我要执行的操作。 问题是,正在引发一个异常,该异常表示“建立连接后无法设置请求属性”。请帮助我解决此问题。 问题答案: 假设您正在使用HTTP进行下载,则需要使用HEAD http动词

  • 我正在尝试从我的网站下载一个EXE文件。例如,我访问了Rarlab的网站,下载了一个新安装的64位WinRAR版本(我们都知道这是什么) 无论如何,我上传了64位的“设置”exe文件到我的网站的根文件夹,在那里它很容易达到下载(为了测试的目的)通过任何浏览器进入我的站点,我都可以成功地从rarlabs下载“setup”文件,并像执行任何其他EXE文件一样执行它。 看在上帝的份上,这是我想不明白的地

  • 问题内容: 好吧,这看起来很简单,确实如此。将文件下载到服务器所需要做的就是: 只有一个问题。如果文件很大,例如100mb,该怎么办?然后,您将耗尽内存,并且无法下载文件。 我想要的是一种在下载文件时将文件写入磁盘的方法。这样,我可以下载更大的文件,而不会遇到内存问题。 问题答案: 从PHP 5.1.0开始,支持通过传递流句柄作为参数来逐段编写: 从手册中: 如果 数据 [是第二个参数]是流资源,