4

我想在下载 PDF 文件时从网站检索原始文件名,而不是重命名它,而是将其保存为目录 SD/Android/Data/(MyAPP)/Files 下的相同名称。到目前为止,我必须告诉 android 文件名在查找时应该是什么以及在下载时将其保存为什么。有没有一种简单的方法可以更改它以将其保存为原始名称?谢谢

private void startDownload() {

    String isFileThere = Environment.getExternalStorageDirectory()
            + "/Android/Data/" + getApplicationContext().getPackageName()
            + "/files/xxxxxxxx.pdf";
    File f = new File(isFileThere);

    if (f.exists()) {
        mProgressDialog.setProgress(0);
        showPdf();
    } else {

        DownloadFile downloadFile = new DownloadFile();
        downloadFile
                .execute(url);

    }
}

class DownloadFile extends AsyncTask<String, Integer, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog.show();
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        super.onProgressUpdate(progress);
        mProgressDialog.setProgress(progress[0]);
    }

    @Override
    protected String doInBackground(String... aurl) {

        try {

            URL url = new URL(aurl[0]);
            URLConnection connection = url.openConnection();

            connection.connect();
            int fileLength = connection.getContentLength();
            int tickSize = 2 * fileLength / 100;
            int nextProgress = tickSize;

            Log.d(

            "ANDRO_ASYNC", "Lenght of file: " + fileLength);

            InputStream input = new BufferedInputStream(url.openStream());

            String path = Environment.getExternalStorageDirectory()
                    + "/Android/Data/"
                    + getApplicationContext().getPackageName() + "/files";
            File file = new File(path);
            file.mkdirs();
            File outputFile = new File(file, "xxxxxxxx.pdf");

            OutputStream output = new FileOutputStream(outputFile);

            byte data[] = new byte[1024 * 1024];
            long total = 0;
            int count;
            while ((count = input.read(data)) != -1) {
                total += count;
                if (total >= nextProgress) {
                    nextProgress = (int) ((total / tickSize + 1) * tickSize);
                    this.publishProgress((int) (total * 100 / fileLength));
                }
                output.write(data, 0, count);
            }

            output.flush();
            output.close();
            input.close();
            mProgressDialog.setProgress(0);
            mProgressDialog.dismiss();

        } catch (Exception e) {
        }
        return null;
    }

    {

    }

    @Override
    protected void onPostExecute(String unused) {

        File file = new File(Environment.getExternalStorageDirectory()
                + "/Android/Data/"
                + getApplicationContext().getPackageName()
                + "/files/" + "xxxxxxxx.pdf");
        Intent testIntent = new Intent(Intent.ACTION_VIEW);
        testIntent.setType("application/pdf");
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        Uri uri = Uri.fromFile(file);
        intent.setDataAndType(uri, "application/pdf");
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(atcChoice.this,
                    "No PDF viewer is available, please download one from Play store",
                    Toast.LENGTH_LONG).show();

        }
    }

}
4

1 回答 1

10

尝试使用URLUtil.guessFileName()

这是一个如何使用它的简单示例:

String url = http://...;
String fileExtenstion = MimeTypeMap.getFileExtensionFromUrl(url);
String name = URLUtil.guessFileName(url, null, fileExtenstion);
于 2012-05-09T19:26:57.970 回答