Android开发之sd卡存储和机身存储的路径获取

Posted 自長安的李少俠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发之sd卡存储和机身存储的路径获取相关的知识,希望对你有一定的参考价值。

来源:https://blog.csdn.net/anjingshuai/article/details/84682779

 

 

开发过程中碰到将文件存储到手机中时,要先判断是否有sd卡,如下所示

  1.  
    // 判断是否有SD卡
  2.  
    private static boolean ExistSDCard() {
  3.  
    if (android.os.Environment.getExternalStorageState().equals(
  4.  
    android.os.Environment.MEDIA_MOUNTED)) {
  5.  
    return true;
  6.  
    } else
  7.  
    return false;
  8.  
    }

 如果存在,则要获取sd卡的根目录路径,在目录下创建新的文件夹,sd卡根目录路径如下:

  1.  
    public static String SDCARDPATH = Environment.getExternalStorageDirectory()
  2.  
    .getPath();

 

 

然后是将要复制的文件写到sd卡下新建的文件夹内,代码如下:

  1.  
    private void copyzipfileToLocalDir(final String path, final String filename) {
  2.  
    File file = new File(path);
  3.  
    if (file.exists()) {
  4.  
    Uri uri = Uri.fromFile(file);
  5.  
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  6.  
    intent.setClass(MainActivity.this, TestActivity.class);
  7.  
    startActivity(intent);
  8.  
    return;
  9.  
    }
  10.  
    pdlog = new ProgressDialog(this);
  11.  
    pdlog.setMessage("正在复制文件...");
  12.  
    pdlog.show();
  13.  
     
  14.  
    new Thread() {
  15.  
    public void run() {
  16.  
    try {
  17.  
    InputStream input = getApplicationContext().getAssets()
  18.  
    .open(filename);
  19.  
    File f = new File(path);
  20.  
    if (f.exists()) {
  21.  
    return;
  22.  
    }
  23.  
    File file = f.getParentFile();
  24.  
    // SDCARD/CN/ZNsql====================path
  25.  
    if (!file.exists()) {
  26.  
    file.mkdir();
  27.  
    }
  28.  
    FileOutputStream fout = new FileOutputStream(f);
  29.  
    byte[] buff = new byte[1024];
  30.  
    int len = 0;
  31.  
    while ((len = input.read(buff)) > 0) {
  32.  
    fout.write(buff, 0, len);
  33.  
    }
  34.  
    fout.close();
  35.  
    input.close();
  36.  
     
  37.  
    } catch (Exception e) {
  38.  
    e.printStackTrace();
  39.  
    }
  40.  
    handler.sendEmptyMessage(1);
  41.  
    };
  42.  
    }.start();
  43.  
    }
  44.  
    private Handler handler = new Handler() {
  45.  
     
  46.  
    public void handleMessage(android.os.Message msg) {
  47.  
    switch (msg.what) {
  48.  
    case 1:
  49.  
    if (pdlog != null) {
  50.  
    if (pdlog.isShowing()) {
  51.  
    pdlog.cancel();
  52.  
    }
  53.  
    ;
  54.  
    }
  55.  
    // jump
  56.  
    File file = new File(SDCARDPATH+ "androidtest.pdf");
  57.  
     
  58.  
    if (file.exists()) {
  59.  
    Uri uri = Uri.fromFile(file);
  60.  
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  61.  
    intent.setClass(MainActivity.this, TestActivity.class);
  62.  
    startActivity(intent);
  63.  
    }
  64.  
     
  65.  
    break;
  66.  
    default:
  67.  
    break;
  68.  
    }
  69.  
    };
  70.  
    };

 

这样就将assets下的文件写入了外置sd卡,对于一些不支持外置存储卡的Android手机,我们可以将文件写入机身内存,也就是俗称的ROM中,RomPath= Environment.getDataDirectory().getPath();当判断到没有外置sd卡时就可以把path换成这个RomPath即可,这样就完成了将文件写入机身内存中。

以上是关于Android开发之sd卡存储和机身存储的路径获取的主要内容,如果未能解决你的问题,请参考以下文章

Android文件存储使用参考

获取存储在 sd 卡 + android 中的图像的缩略图 Uri/路径

Android判断是否存在外置SD卡(获取手机所有存储设备的路径)

Android数据存储之SD卡文件操作

xamarin怎样获取android外卡路径

Android 外置SDCard读写权限总结