【问题标题】:Downloading a PDF file with HttpUrlConnection and InputStream使用 HttpUrlConnection 和 InputStream 下载 PDF 文件
【发布时间】:2019-04-27 09:35:10
【问题描述】:

我是 Android 开发的初学者。我试图弄清楚使用AsyncTask 下载文件。到目前为止,我已经能够关闭HttpUrlConnectionInputStream,但我找不到任何关于从 URL 下载文件的信息。正如我所说,我对此很陌生。大部分代码来自我个人的知识。我从一篇文章中得到了 Http 连接和输入流的代码。我想知道下一步。

public class MainActivity extends AppCompatActivity {
    Button downloadPDF;
    DownloadingClass downPDF;
    private static final String TAG = "omar.asynctaskdemo;";
    String urlExample = "https://doc.lagout.org/programmation/Actionscript%20-%20Flash%20-%20Flex%20-%20Air/Flash%20Development%20for%20Android%20Cookbook%20-%20Labrecque%20-%20Packt%20%282011%29/Flash%20Development%20for%20Android%20Cookbook%20-%20Labrecque%20-%20Packt%20%282011%29.pdf";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        downloadPDF = findViewById(R.id.download_pdf);
        downPDF = new DownloadingClass();

        downloadPDF.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                downPDF.execute();
            }
        });

        permissionCheck();
    }

    private void permissionCheck() {
        if(ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
                return;
            }
        }
    }

    private class DownloadingClass extends AsyncTask<String, Integer, Void>{

        @Override
        protected Void doInBackground(String... strings) {
            URL url;
            try {
                url = new URL(urlExample);
                HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                httpURLConnection.setRequestMethod("GET");
                InputStream inputStream = httpURLConnection.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                String line = bufferedReader.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
}

【问题讨论】:

    标签: java android android-asynctask inputstream httpurlconnection


    【解决方案1】:

    您可以尝试创建 FileOutputStream,并将 InputStream 中的字节写入文件。

    看看 FileOutputStream 及其“write(byte[] b)”方法。 https://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html

    【讨论】:

    • 我从未与FileOutputStream 合作过。如何在我的代码中实现它?
    • 当您想要下载任何文件(在您的情况下为 PDF 文件)时,您需要先在机器上创建一个文件。您可以使用 File 类创建一个新的空文件。您需要的构造函数带有字符串路径名或 URI,具体取决于具体情况。我包括那个文档。 docs.oracle.com/javase/7/docs/api/java/io/File.html 成功创建 File 对象后,您可以将 IT 作为参数传递给 FileOutputStream 构造函数,然后您可以将字节写入该文件。 (查看我提供的原始答案中 FileOutputStream 的构造函数)。
    • 谢谢你,@Daniel B。我赞成并接受了你的回答。如果您认为这是一个很好的问题,您能否也给我一个赞成票?
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 2020-03-16
    • 2013-09-10
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多