如何查看手机中存储的文件?

时间:2017-08-22 10:39:58

标签: android

我正在从网址下载文件并将其保存在手机记忆库中。下载显示成功,但我无法在手机上查看该文件。我认为这是因为保存文件的位置以:

开头
/data/user/0/

并且只有root有权访问它。我只需要将它保存在手机的内存中。我的代码是:

package com.example.abhijeet.mockapp;

import android.Manifest;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Path;
import java.nio.file.Paths;

public class MainActivity extends AppCompatActivity {
    private ProgressDialog pDialog;
    EditText mEditText;
    String text;

    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEditText = (EditText) findViewById(R.id.edit_text);
    }

    public void downloadFile(View view) {

        verifyStoragePermissions(MainActivity.this);


        new DownloadFileFromURL().execute(
                "FILE URL HERE");


    }

    public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(
                    activity,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        }
    }

    class DownloadFileFromURL extends AsyncTask<String, String, String> {
        long total;

        /**
         * Before starting background thread
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            System.out.println("Starting download");

            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Loading... Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        /**
         * Downloading file in background thread
         */
        @Override
        protected String doInBackground(String... f_url) {
            int count;
            try {
                String root = Environment.getExternalStorageDirectory().toString();

                System.out.println("Downloading");
                URL url = new URL(f_url[0]);

                URLConnection conection = url.openConnection();
                conection.connect();
                // getting file length
                int lenghtOfFile = conection.getContentLength();

                // input stream to read file - with 8k buffer
                InputStream input = new BufferedInputStream(url.openStream(), 8192);

                // Output stream to write file

                //   File out = new File("test.txt");
                String filename = "test.txt";
                Context context = MainActivity.this;
                File file = new File(context.getFilesDir(), filename);
                FileOutputStream outputStream;

                try {

                    outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
                    byte data[] = new byte[1024];

                    total = 0;
                    while ((count = input.read(data)) != -1) {
                        total += count;

                        // writing data to file
                        outputStream.write(data, 0, count);

                    }
                    outputStream.close();
                } catch (Exception e) {
                }
                // text = output.toString();

                //  text =  MainActivity.this.getFilesDir().getAbsolutePath();
                text = file.getAbsolutePath().toString();


                // flushing output


                // closing streams

                input.close();

                return text;

            } catch (Exception e) {
                Log.e("Error: ", e.getMessage());
                return "error";
            }


        }


        /**
         * After completing background task
         **/
        @Override
        protected void onPostExecute(String file_url) {
            if (file_url.equals(text)) {
                System.out.println("Downloaded");
                Toast.makeText(MainActivity.this, "DOWNLOAD SUCCESSFUL", Toast.LENGTH_LONG).show();
                mEditText.setText(text);
            } else
                Toast.makeText(MainActivity.this, "DOWNLOAD FAILED", Toast.LENGTH_LONG).show();

            pDialog.dismiss();
        }

    }


}

3 个答案:

答案 0 :(得分:0)

使用此路径将文件保存在下载目录

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

答案 1 :(得分:0)

您可以添加此方法,并在每次需要获取用于保存/检索文件的目录时调用:

public static File getDirectory(Context context) {
        ContextWrapper cw = new ContextWrapper(context);
        return cw.getDir("myDir", Context.MODE_PRIVATE); // path to data/user/0/<app_package>/myDir/
    }

答案 2 :(得分:0)

从String filename =&#34; test.txt&#34 ;;更改您的文件名到

 String filename = Environment.getExternalStorageDirectory().toString() + "/" + "test.txt";