浅谈android获取存储目录(路径)的几种方式和注意事项

通常, 我们创建文件/目录, 或者存储图片什么的, 我们都需要拿到手机的存储路径, 现在我们就来看一下获取手机存储路径的几种方式(作为工具类方法调用即可):

第一种: 获取 /storage/emulated/0

public static boolean sdCardIsAvailable() {
 //首先判断外部存储是否可用
 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  File sd = new File(Environment.getExternalStorageDirectory().getPath());
  Log.e("qq", "sd = " + sd);//sd = /storage/emulated/0
  return sd.canWrite();
 } else {
  return false;
 }

第二种: 获取 /storage/emulated/0(类似上面)

public String getSDPath() {
 File sdDir = null;
  //判断sd卡是否存在
boolean sdCardExist = Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED);
if (sdCardExist) {
sdDir = Environment.getExternalStorageDirectory();//获取根目录
Log.e("qq", "外部存储可用..." + sdDir.toString());
}
return sdDir.toString();
}
//使用
private void saveInRoot() {
 if (getSDPath()!=null) {
  //String fileName = getSDPath() + "/";
  //File file = new File(fileName,"123111");//参数
  //if (!file.mkdir()) {
   //Toast.makeText(ExternalStoreActivity.this, "目录已存在...", Toast.LENGTH_SHORT).show();
  //} else {
   //Toast.makeText(ExternalStoreActivity.this, "创建新目录...", Toast.LENGTH_SHORT).show();
  //}
 }
}

以上两种获得的路径, 其实就是系统的根目录, 比如我的手机是华为荣耀6, 就在本地->内部存储这个路径下

第三种: 获取手机指定目录

注意:我怀疑 必须先知道该手机是否存在这个目录才能获取 因为不能保证每个手机自带目录都同样

所以使用前最好查看手机是否具有该路径

public File getAlbumStorageDir(String fileName) {
 // Get the directory for the user's public pictures directory.
 //在 Environment.DIRECTORY_DOWNLOADS 目录下创建名为fileName的文件夹 刷新查看
 File file =
  new File(Environment.getExternalStoragePublicDirectory(Environment.
   DIRECTORY_DOWNLOADS), fileName);//参数2是文件名称
 //mkdirs()可以创建多级目录
 //mkdir()只能创建一级目录
 if (!file.mkdir()) {
  Log.e(LOG_TAG, "Directory not created");
  Toast.makeText(ExternalStoreActivity.this, "目录已存在...", Toast.LENGTH_SHORT).show();
 } else {
  Toast.makeText(ExternalStoreActivity.this, "创建新目录...", Toast.LENGTH_SHORT).show();
 }
 return file;
}

最后, 需要注意的是, 如果我们获取的最终路径是String类型的, 那么, 现在有个需求: 在aaaa路径下存放一张xx.png的图片

实现:

存储路径应该是: aaaa+"/"+xx.png, 如果没加上"/", 那么最终得到的图片是: aaaaxx.png

当然,如果你不想加"/", 也很简单, 保证你的路径是File类型的即可

以上这篇浅谈android获取存储目录(路径)的几种方式和注意事项就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android 获取系统各个目录的方法

    在Android开发过程中,我们经常会对文件系统进行操作--存放.释放我们应用的数据.Android系统中提供了各种功能的文件目录,每个目录都有相应的特点和功能. 这篇文章主要介绍和记录一下实际开发过程中常用的各个文件目录. (1)内部存储(Internal Storage) 内部存储是App的私有目录,当一个应用卸载之后,内部存储中的这些文件也被删除.Shared Preferences和SQLite数据库文件都是存储在内部存储空间上的. -context.getFileDir() 路径:(d

  • 读取android根目录下的文件或文件夹实例

    最近几天真的是各种意义上的忙,忙着考试,还要忙着课程设计,手上又有外包的项目,另一边学校的项目还要搞,自己的东西还在文档阶段,真的是让人想死啊!! 近半个月来,C#这方面的编码比较多,android和java这里完全搁置了,于是抽空写个小例子. 这个例子非常小,就是一个读取android根目录下的文件夹或文件,当做热一下身. @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan

  • 实现Android 获取cache缓存的目录路径的方法

    实现Android 获取cache缓存的目录路径的方法 Android开发中,有时需要知道cache缓存的路径.我写了一个静态类,供大家能参考 public class CommonUtil { /** * 获取cache路径 * * @param context * @return */ public static String getDiskCachePath(Context context) { if (Environment.MEDIA_MOUNTED.equals(Environmen

  • Android遍历所有文件夹和子目录搜索文件

    本文实例为大家分享了android遍历所有文件夹和子目录来搜索文件,供大家参考,具体内容如下 java代码: import java.io.File; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget

  • 浅谈android获取存储目录(路径)的几种方式和注意事项

    通常, 我们创建文件/目录, 或者存储图片什么的, 我们都需要拿到手机的存储路径, 现在我们就来看一下获取手机存储路径的几种方式(作为工具类方法调用即可): 第一种: 获取 /storage/emulated/0 public static boolean sdCardIsAvailable() { //首先判断外部存储是否可用 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { File

  • 浅谈android获取设备唯一标识完美解决方案

    本文介绍了浅谈android获取设备唯一标识完美解决方案,分享给大家,具体如下: /** * deviceID的组成为:渠道标志+识别符来源标志+hash后的终端识别符 * * 渠道标志为: * 1,andriod(a) * * 识别符来源标志: * 1, wifi mac地址(wifi): * 2, IMEI(imei): * 3, 序列号(sn): * 4, id:随机码.若前面的都取不到时,则随机生成一个随机码,需要缓存. * * @param context * @return */ p

  • 浅谈Android获取ImageView上的图片,和一个有可能遇到的问题

    1.在获取图片前先调用setDrawingCacheEnabled(true)这个方法: 举例:mImageView.setDrawingCacheEnabled(true); 2.之后可以通过getDrawingCache()获取图片 举例:Bitmap obmp = Bitmap.createBitmap(mImageView.getDrawingCache());  //获取到Bitmap的图片 3.获取完图片后记得调用setDrawingCacheEnabled(false) 举例:mI

  • 浅谈TensorFlow中读取图像数据的三种方式

    本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片测试,有的时候,我们并不需要对很多图像做测试,可能就是几张甚至一张.这种情况下没有必要用队列机制. import tensorflow as tf import matplotlib.pyplot as plt def read_image(file_name): img = tf.read_fil

  • 浅谈Java生成唯一标识码的三种方式

    目录 前言 正文 UUID实现唯一标识码 SnowFlake实现唯一标识码 通过时间工具生成带有业务标示的唯一标识码 前言 我们经常会遇到这样的场景,需要生成一个唯一的序列号来表明某一个数据的唯一性,在单节点的应用中我们可以简单地使用一个自增的整型来实现实现,但是在分布式情况下这个方式却存在冲突的可能性,那么有什么办法我们可以生成一个唯一的序列号呢,并且如果想使得这个序列号也能展示一些业务信息呢? 正文 UUID实现唯一标识码 UUID 的目的是让分布式系统中的所有元素,都能有唯一的辨识资讯,而

  • 浅谈Springboot2.0防止XSS攻击的几种方式

    目录 防止XSS攻击,一般有两种做法: 转义 做法的三种实现: 转义方法一:注册自定义转换器 转义方法二:BaseController 转义方法三:Converter 在平时做项目代码开发的时候,很容易忽视XSS攻击的防护,网上有很多自定义全局拦截器来实现XSS过滤,其实不需要这么麻烦,SpringBoot留有不少钩子(扩展点),据此我们可以巧妙地实现全局的XSS过滤 防止XSS攻击,一般有两种做法: 转义使用工具类HtmlUtils实现 过滤将敏感标签去除jsoup实现了非常强大的clean敏

  • 浅谈解决Hibernate懒加载的4种方式

    本文总结了我在学习hibernate的过程中,解决hibernate懒加载问题的四种方式. 所谓懒加载(lazy)就是延时加载,延迟加载. 什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载. 至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为内存容量有限,为了减少并发量,减少系统资源的消耗,我们让数据在需要的时候才进行加载,这时我们就用到了懒加载. 例如,有一个对象是Employee,还有一个对象是Department.显然,对于Employee相对Depa

  • 浅谈SpringBoot资源初始化加载的几种方式

    目录 一.问题 二.资源初始化 一.问题 在平时的业务模块开发过程中,难免会需要做一些全局的任务.缓存.线程等等的初始化工作,那么如何解决这个问题呢?方法有多种,但具体又要怎么选择呢? 二.资源初始化 1.既然要做资源的初始化,那么就需要了解一下springboot启动过程(这里大体说下启动过程,详细:https://www.jb51.net/article/133648.htm) 按照前面的分析,Spring-boot容器启动流程总体可划分为2部分: 执行注解:扫描指定范围下的bean.载入自

  • Android中访问sdcard路径的几种方式

    以前的Android(4.1之前的版本)中,SDcard路径通过"/sdcard"或者"/mnt/sdcard"来表示,而在JellyBean(安卓4.1)系统中修改为了" /storage/sdcard0",还会有多个SDcard的情况.目前为了保持和之前代码的兼容,SDcard路径做了Link映射.为了使代码更加健壮并能兼容以后的Android版本和新设备,安卓4,1后sdcard中会有系统自动生成的保存特定内容的的文件目录,从而可以使用一些

  • 详解Android获取所有依赖库的几种方式

    当项目越来越大的时候,依赖的库也越来越多,再加上aar的传递依赖,导致dependency的急速膨胀.我们可以通过如下几种方式,查看项目依赖的所有库(包含直接依赖和间接依赖). 方式一:通过dependencies命令 ./gradlew :app:dependencies 该task会显示如下所示的输出: 输出列表展示了所有configuration下的依赖树,依赖关系明显,层次清晰.如果觉得输出的结果太冗长(通常情况下包含几十个configuration),可以通过指定configurati

随机推荐