想列出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); } } }