当前位置: 首页 > 知识库问答 >
问题:

下载PDF时,InputStream返回空文件

魏高邈
2023-03-14
    public static void DownloadFile(final String fileURL, final File directory) {

    Thread thread = new Thread(new Runnable(){
        @Override
        public void run() {
            try {

                try {
                    FileOutputStream f = new FileOutputStream(directory);
                    URL u = new URL(fileURL);
                    c = (HttpURLConnection) u.openConnection();
                    c.setRequestMethod("GET");
                    //c.setRequestProperty("Content-Type", "application/pdf");
                    //c.setDoOutput(true);
                    c.connect();
                    Log.d("debugz", Integer.toString(c.getContentLength()));

                    InputStream in = c.getInputStream();

                    byte[] buffer = new byte[1024];
                    int len1 = 0;
                    while ((len1 = in.read(buffer)) > 0) {
                        f.write(buffer, 0, len1);
                    }
                    f.flush();
                    f.getFD().sync();
                    f.close();


                } catch (Exception e) {
                    e.printStackTrace();
                }


            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

    thread.start();


}


public static String getPDF(String pdfurl) {

    String extStorageDirectory = Environment.getExternalStorageDirectory()
            .toString();
    File folder = new File(extStorageDirectory, "schematisktscheman");
    folder.mkdir();
    File file = new File(folder, "schemainfo.pdf");
    try {
        file.createNewFile();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    DownloadFile(pdfurl, file);

    return null; //added return
}

在我的主要活动中:

SchedulePdfProcessor.getPDF("http://www.pdf995.com/samples/pdf.pdf");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory() + "/schematisktscheman/schemainfo.pdf")));

编辑:我在主线程上运行了网络代码,它引发了一个异常。现在为下载创建一个新的线程,它将获得示例PDF(http://www.pdf995.com/samples/PDF.PDF),并将其内容放入文件中。感谢@GreenApps!

共有1个答案

华易安
2023-03-14

首先,替换:

f.close();

与:

f.flush();
f.getFD().sync();
f.close();

这确保在继续之前将所有内容写入磁盘。

 类似资料:
  • 我正在使用Apache Commons Net FTP库进行FTP客户端项目。我已成功登录,但当我尝试从FTP服务器下载文件时,得到了空文件或null。 我尝试设置文件传输模式或文件类型,但都不起作用。 下面是我启动客户端的代码示例: 这是检索文件的代码: 我还尝试添加了一些其他属性,如: 但都不管用。 这可能与服务器配置有关吗?实际上我没有对FTP服务器的配置访问权限。提供商只给了我对它的读取权

  • 问题内容: 我没有任何例外,但是当我跑步时… 然后,deckFile.read()返回-1。该文件位于正确的文件夹中,并且不为空。 这应该是世界上最容易的事情。 编辑:AssetManager实际上确实在那里列出“ cards.txt”,所以这不应该是问题。 问题答案: 问题是我的文件太大,并且由于扩展名为“ .txt”而被压缩了。通过将文件重命名为通常已压缩的格式“ .mp3”,就没有问题

  • 我可以通过以下服务下载pdf文件: 但是,当我运行该服务时,我得到了以下响应: %���� 10 obj 要打开pdf,我需要用第二个鼠标按钮点击响应链接: WS网址 然后选择“在新选项卡中打开”以打开pdf文件,看起来您正在运行该服务两次以获得一次pdf文件。 我想自动打开每个请求到WS的pdf文件。 这意味着每次您请求WS时,都应该返回直接在屏幕中打开的pdf文件。 有人能帮我修一下吗? Tk

  • 我在过去的两个小时里一直在试图解决这个问题。试过很多东西。 该片段似乎正在向我的适配器传递空上下文。我尝试在onCreate和onCreateView和onActivityCreated中初始化上下文变量。同样的结果。

  • 问题内容: 我正在尝试编写一个函数,该函数接受带压缩文件的数据,并返回另一个带解压缩数据的数据。 压缩文件将只包含一个文件,因此不需要创建目录等。 我试着看了看其他人,但是我对Java中这么多不同类型的流感到困惑。 问题答案: 概念 GZIPInputStream用于压缩为gzip(扩展名为“ .gz”)的流(或文件)。它没有任何标题信息。 此类实现流过滤器,以读取GZIP文件格式的压缩数据 如果

  • 问题内容: 我正在修复有关DocumentBuilder.parse的现有代码的错误。我有以下代码: 我不明白为什么我得到xmlDoc的空值,尽管我具有Output和xmlSource变量的有效值。请帮忙。 谢谢! 问题答案: 流很可能已经正确解析,仅因为 它将始终是。这并不表示DOM树为空。请首先检查文档中是否有某些节点(子节点)。 如果DOM确实是空的,那么我首先将输入流的内容打印到控制台(可