Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 下载网站上托管的文件_Java_Android_Download - Fatal编程技术网

Java 下载网站上托管的文件

Java 下载网站上托管的文件,java,android,download,Java,Android,Download,我正在尝试下载一个我在mega上托管的文件。代码如下: AsyncTask.execute(new Runnable() { @Override public void run() { LoggerDebug.d("Prakhar", "Inside run"); try { URL downloadUrl = new URL(url);

我正在尝试下载一个我在mega上托管的文件。代码如下:

AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                LoggerDebug.d("Prakhar", "Inside run");
                try {
                    URL downloadUrl = new URL(url);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) downloadUrl.openConnection();

                    httpURLConnection.setRequestMethod("GET");
                    httpURLConnection.setDoOutput(true);

                    httpURLConnection.connect();

                    File SDCardRoot = Environment.getExternalStorageDirectory();
                    File downloadFile = new File(SDCardRoot, "downloaded.zip");

                    FileOutputStream fileOutputStream = new FileOutputStream(downloadFile);
                    InputStream inputStream = httpURLConnection.getInputStream();

                    int totalSize = httpURLConnection.getContentLength();
                    int downloadedSize = 0;

                    byte[] buffer = new byte[1024];
                    int bufferLength = 0;

                    LoggerDebug.d("Prakhar", String.valueOf(totalSize));
                    while ((bufferLength = inputStream.read(buffer)) > 0 ) {
                        LoggerDebug.d("Prakhar", String.valueOf(downloadedSize));
                        fileOutputStream.write(buffer, 0, bufferLength);
                        downloadedSize += bufferLength;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
}
现在,在运行此代码示例后,我得到以下结果:

总尺寸为:-1 下载大小:1024 在手机上,我可以看到
下载的.zip文件,它的大小是
1.97KB
,上传的原始大小是
87.1KB


我哪里出错了?

您是否尝试过更改:

while ((bufferLength = inputStream.read(buffer)) > 0 ) {


所以我不知道你是否解决了你的问题,但我可以看到一些潜在的问题

  • setDoOutput(true)
    表示您将根据文档进行上传。具体来说,它说:
  • 要将数据上载到web服务器,请使用
    setDoOutput(true)配置输出连接。

    你不是从我看到的上传,所以这是不必要的,而且不清楚服务器会如何响应,因为你似乎在请求上传功能

  • 返回-1表示EOF。您没有访问您打算访问的文件,可能是因为#3

  • 你可能不能随意从他们的网站下载。你需要以某种方式进行身份验证。这可能是API密钥、会话id、yadda-yadda。他们有自己的API,根据API中的电子邮件登录。该页面在GitHub中无法正确呈现,但您需要了解如何登录。他们有一个Android应用程序示例,但看起来API都是本地代码


  • while循环结束后,您错过了
    fileOutputStream.close()
    。您是否有权限写入
    SDCardRoot
    ?在关闭流之前,我还将
    flush()
    流。@Blackbelt我有权限写入,是的。没有更改。在实现了建议的两行代码后仍然是一样的。您尝试过mega之外的代码吗?
    不兼容的类型boolean和int
    就是这里出现的。
    while ((bufferLength = inputStream.read(buffer)) != null) {