有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java下载pdf文件并保存到SD卡

我想下载pdf文件并将其保存到内部存储器中。以下是我正在使用的代码:

我正在从其他类调用我的方法:

new Thread(new Runnable() {
    public void run() {

        new Main().downloadPdfContent("http://people.opera.com/howcome/2005/ala/sample.pdf");

    }
  }).start();

方法如下所示:

public void downloadPdfContent(String urlToDownload){

    URLConnection urlConnection = null;

    try{

        URL url = new URL(urlToDownload);

        //Opening connection of currrent url

        urlConnection = url.openConnection();
        urlConnection.connect();

        //int lenghtOfFile = urlConnection.getContentLength();


    String PATH = Environment.getExternalStorageDirectory() + "/1/";

    File file = new File(PATH);
    file.mkdirs();
    File outputFile = new File(file, "test.pdf");
    FileOutputStream fos = new FileOutputStream(outputFile);

    InputStream is = url.openStream();


    byte[] buffer = new byte[1024];

    int len1 = 0;

    while ((len1 = is.read(buffer)) != -1) {
        fos.write(buffer, 0, len1);
    }

    fos.close();
    is.close();

   System.out.println("--pdf downloaded--ok--"+urlToDownload);

    }catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();

    }

}

我在网上找到了pdf的链接: http://people.opera.com/howcome/2005/ala/sample.pdf

但是,我在这一行遇到了一个例外:

urlConnection。connect()

例外情况: java。网未知的例外:人。歌剧com

我不知道怎么了。也许有人可以看看

谢谢


共 (3) 个答案

  1. # 1 楼答案

        <uses-permission android:name="android.permission.INTERNET"/>
    

    在你的清单上。xml

  2. # 2 楼答案

    我使用了相同的代码并获得了网络。onThreadException错误

    但是在我的oncreate()方法中使用了这段代码之后,我就能够解决这个问题了

    if (android.os.Build.VERSION.SDK_INT > 9)    
    {       
         StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
         StrictMode.setThreadPolicy(policy);
     }
    
  3. # 3 楼答案

    遵循以下步骤:

    1)声明文件名

    String fileName;
        //for image
        fileName = "matchfine1.png";
        //for pdf
        fileName = "samplepdf.pdf";
    

    2)调用方法来调用下载过程

    startDownload(fileName);
    

    3)定义开始下载方法:

    //for download file start
        private void startDownload(String filename) {
            String filedowname = filename;
            //for image
            String url = "http://farm1.static.flickr.com/114/298125983_0e4bf66782_b.jpg";
            //for pdf
            String url = "http://people.opera.com/howcome/2005/ala/sample.pdf";
            new DownloadFileAsync().execute(url,filedowname);
        }
    

    4)对于自动加载进度条:

    @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
                case DIALOG_DOWNLOAD_PROGRESS:
                    mProgressDialog = new ProgressDialog(this);
                    mProgressDialog.setMessage("Downloading file..");
                    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    mProgressDialog.setCancelable(false);
                    mProgressDialog.show();
                    return mProgressDialog;
                default:
                    return null;
            }
        }
    

    5)定义下载过程扩展异步任务

    class DownloadFileAsync extends AsyncTask<String, String, String> {
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                showDialog(DIALOG_DOWNLOAD_PROGRESS);
            }
    
            @Override
            protected String doInBackground(final String... aurl) {
    
                try {
    
                    File root = android.os.Environment.getExternalStorageDirectory();
                    File dir = new File (root.getAbsolutePath() + "/Your_file_save_path/");
                    if(dir.exists()==false) {
                        dir.mkdirs();
                    }
    
                    URL url = new URL(aurl[0]);
                    String filename = aurl[1];
                    URLConnection conexion = url.openConnection();
                    conexion.connect();
    
                    int lenghtOfFile = conexion.getContentLength();
                    Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
    
                    InputStream input = new BufferedInputStream(url.openStream());
                    OutputStream output = new FileOutputStream(dir+"/"+filename);
    
                    byte data[] = new byte[1024];
    
                    long total = 0;
                    int count;
                    while ((count = input.read(data)) != -1) {
                        total += count;
                        publishProgress(""+(int)((total*100)/lenghtOfFile));
                        output.write(data, 0, count);
                    }
    
                    output.flush();
                    output.close();
                    input.close();
                } catch (Exception e) {}
                return null;
    
            }
            protected void onProgressUpdate(String... progress) {
                Log.d("ANDRO_ASYNC", progress[0]);
                mProgressDialog.setProgress(Integer.parseInt(progress[0]));
            }
    
            @Override
            protected void onPostExecute(String unused) {
                dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
            }
        }
        //for download file end
    

    6)用dir中的文件路径替换“Your_file_save_path”。然后下载并签入指定位置