android 讀寫文件、列出根目錄文件及新版本權限


想列出android 內部存儲根目錄(內部存儲也是sd卡形式)

            File path = Environment.getExternalStorageDirectory();

            File[] files=path.listFiles();
            for(int i=0;i<files.length;i++){
                str1 += files[i].getAbsolutePath()+",";
            }
            textView.setText("bb"+str1);

發現老是提示報錯 ,debug 發現eacces,是權限問題

1、先在AndroidManifest.xml 里

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

還加了
<application
android:allowBackup="true"
android:requestLegacyExternalStorage="true"

發現還沒有用,即使在手機權限里加上還不行

2、加上下面代碼好了,新版本需要用下面的方式

 private  final int REQUEST_EXTERNAL_STORAGE = 1;
    private  String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE };
    public  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);
        }
    }

然后在

onCreate 里調用
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
verifyStoragePermissions(this);

3、后面處理讀寫文件也ok了

try {
                File urlFile = new File(str3+"/sd/test.txt");
                Log.e("-----------","111");
                InputStreamReader isr = new InputStreamReader(new FileInputStream(urlFile), "UTF-8");
                BufferedReader br = new BufferedReader(isr);
                Log.e("-----------","112221");
                String str = "";
                String mimeTypeLine = null ;
                while ((mimeTypeLine = br.readLine()) != null) {
                    str = str+mimeTypeLine;
                }
                Log.e("-----------",str);
                textView.setText(str);
            } catch (Exception e) {
                e.printStackTrace();
            }

 

 4 一個顯示目錄的 Activity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        verifyStoragePermissions(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = this.findViewById(R.id.tv1);

        //String str =getApplicationContext().getFilesDir().getAbsolutePath();

        String str1 = Environment.getExternalStorageDirectory().getAbsolutePath();

        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

            File path = Environment.getExternalStorageDirectory();

            File[] files=path.listFiles();
            for(int i=0;i<files.length;i++){
                str1 += files[i].getAbsolutePath()+",";
            }
            textView.setText("bb"+str1);
        }

    }
    private  final int REQUEST_EXTERNAL_STORAGE = 1;
    private  String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE };
    public  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);
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM