1

我已经写了这个代码供下载pdfurl文件url是这个-

 String fileURL= "http://www.vivekananda.net/PDFBooks/History_of_India.pdf";

编码这个

  public static void DownloadFile(String fileURL, File directory) {

    try {

        FileOutputStream f = new FileOutputStream(directory);
        URL u = new URL(fileURL);
        HttpURLConnection c = (HttpURLConnection) u.openConnection();
        c.setRequestMethod("GET");
        c.setDoOutput(true);
        c.getResponseCode();
        c.connect();

        InputStream in = c.getInputStream();

        byte[] buffer = new byte[1024];
        int len1 = 0;
        while ((len1 = in.read(buffer)) > 0) {
            f.write(buffer, 0, len1);
        }
        f.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

但这显示文件未找到异常,响应代码为 405。我不知道为什么会这样。请帮助..!!

这是我在 sd 卡中创建文件的代码-

编码这个

  public void createPdfFile(){
        String extStorageDirectory = Environment.getExternalStorageDirectory()
                .toString();
                File folder = new File(extStorageDirectory, "pdf");
                folder.mkdir();
                 file = new File(folder, "storrage_data.pdf");
                try {
                    file.createNewFile();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }        
    }`

在此之后,我在 onResume(); 这样的线程中调用下载方法;因为来自 onCreate 它会给出错误“主线程上的网络”。现在我错了,我不知道 :(

编码这个

 public void downloadFile(){        

     new Thread(new Runnable() {

            @Override
            public void run() {             
         Downloader.DownloadFile(url, file);
          showPdf();

            }
        }).start();   


    }
4

4 回答 4

2

可能的原因是您想要的文件夹不存在。首先检查它是否存在。如果没有,请创建它。然后创建文件输出流并写入它。

于 2015-12-30T06:02:17.357 回答
1

我建议你使用下载管理器。下载过程中可能会出现太多问题,无法自己处理所有问题。想想在下载过程中暂时失去连接......下面是我从我的应用程序中提取的一些代码,并稍作修改以摆脱你不需要的部分。

public void downloadAndOpenPdf(String url,final File file) {
    if(!file.isFile()) {
        DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        DownloadManager.Request req = new DownloadManager.Request(Uri.parse(url));
        req.setDestinationUri(Uri.fromFile(file));
        req.setTitle("Some title");

        BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                unregisterReceiver(this);
                if (file.exists()) {
                    openPdfDocument(file);
                }
            }
        };
        registerReceiver(receiver, new IntentFilter(
                DownloadManager.ACTION_DOWNLOAD_COMPLETE));
        dm.enqueue(req);
        Toast.makeText(this, "Download started", Toast.LENGTH_SHORT).show();
    }
    else {
        openPdfDocument(file);
    }
}

public boolean openPdfDocument(File file) {
    Intent target = new Intent(Intent.ACTION_VIEW);
    target.setDataAndType(Uri.fromFile(file), "application/pdf");
    target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    try {
        startActivity(target);
        return true;
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this,"No PDF reader found",Toast.LENGTH_LONG).show();
        return false;
    }

}
于 2015-12-30T06:14:13.090 回答
0

你的代码是正确的。现在您需要将您的 pdf 文件下载到外部存储或任何您想下载和保存的地方。

于 2015-12-30T06:00:39.673 回答
0

删除此代码并重试。

//c.setRequestMethod("GET"); //c.setDoOutput(true); //c.getResponseCode(); //c.connect();

我认为URL.openConnection()已经有连接描述,所以c.connect()没有必要。

于 2015-12-30T06:05:43.290 回答