• 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即可,这样就完成了将文件写入机身内存中。

  • 相关阅读:
    开源IDS系列--解决barnyard2 停止运行 libmysqlclient.so.16.0.0
    开源IDS系列--snorby 2.6.2 undefined method `run_daily_report' for Event:Class (NoMethodError)
    开源IDS系列--snorby 进程正常,但是worker无法启动 The Snorby worker is not currently running
    大数据之路:阿里巴巴大数据实践小记
    LRU算法的应用
    Bitmap的巧用
    impala和presto
    常用sql
    wget rpm yum
    WSGI uwsgi uWSGI
  • 原文地址:https://www.cnblogs.com/LiTZen/p/12188771.html
Copyright © 2020-2023  润新知