• Android获取各种系统路径的方法
  • 完整 操作手机文件 工具类

Android获取各种系统路径的方法

通过Environment获取的

  • Environment.getDataDirectory().getPath() :                                      获得根目录/data 内部存储路径
  • Environment.getDownloadCacheDirectory().getPath()  :               获得缓存目录/cache
  • Environment.getExternalStorageDirectory().getPath():                  获得SD卡目录/mnt/sdcard(获取的是手机外置sd卡的路径)
  • Environment.getRootDirectory().getPath() :                                     获得系统目录/system

通过Context获取的

  • Context.getDatabasePath()                                返回通过Context.openOrCreateDatabase 创建的数据库文件
  • Context.getCacheDir().getPath() :          用于获取APP的cache目录/data/data//cache目录

  • Context.getExternalCacheDir().getPath()  :                           用于获取APP的在SD卡中的cache目录/mnt/sdcard/android/data//cache

  • Context.getFilesDir().getPath()  :          用于获取APP的files目录 /data/data//files

  • Context.getObbDir().getPath():              用于获取APPSDK中的obb目录/mnt/sdcard/Android/obb/

  • Context.getPackageName() :                                                  用于获取APP的所在包目录

  • Context.getPackageCodePath()  :                                          来获得当前应用程序对应的 apk 文件的路径
  • Context.getPackageResourcePath() :                                   获取该程序的安装包路径

完整 操作手机文件 工具类:

public void saveToPhone(View v) {
//        FileDir();SDCardTest();}private void FileDir() {boolean mExternalStorageAvailable = false;boolean mExternalStorageWriteable = false;String state = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(state)) {// We can read and write the mediamExternalStorageAvailable = mExternalStorageWriteable = true;} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {// We can only read the mediamExternalStorageAvailable = true;mExternalStorageWriteable = false;} else {// Something else is wrong. It may be one of many other states, but all we need//  to know is we can neither read nor writemExternalStorageAvailable = mExternalStorageWriteable = false;}Log.i("codecraeer", "getFilesDir = " + getFilesDir());Log.i("codecraeer", "getExternalFilesDir = " + getExternalFilesDir("exter_test").getAbsolutePath());Log.i("codecraeer", "getDownloadCacheDirectory = " + Environment.getDownloadCacheDirectory().getAbsolutePath());Log.i("codecraeer", "getDataDirectory = " + Environment.getDataDirectory().getAbsolutePath());Log.i("codecraeer", "getExternalStorageDirectory = " + Environment.getExternalStorageDirectory().getAbsolutePath());Log.i("codecraeer", "getExternalStoragePublicDirectory = " + Environment.getExternalStoragePublicDirectory("pub_test"));}/*** SDcard操作*/public void SDCardTest(){try {//获取扩展SD卡设备状态String sDStateString = Environment.getExternalStorageState();//拥有可读可写权限if(sDStateString.equals(Environment.MEDIA_MOUNTED)){//获取扩展存储设备的文件目录File SDFile = Environment.getExternalStorageDirectory();String fileDirectoryPath=SDFile.getAbsolutePath()+File.separator+"测试文件夹";File fileDirectory=new File(fileDirectoryPath);//打开文件File myFile = new File(fileDirectoryPath+File.separator+"MyFile.txt");//判断是否存在,不存在则创建if (!fileDirectory.exists()) {//按照指定的路径创建文件夹fileDirectory.mkdirs();}if (!myFile.exists()) {try {//在指定的文件夹中创建文件myFile.createNewFile();} catch (Exception e) {}}//写数据String szOutText="Hello, World!+姚佳伟";FileOutputStream outputStream=new FileOutputStream(myFile);outputStream.write(szOutText.getBytes());outputStream.close();}//拥有只读权限else if(sDStateString.endsWith(Environment.MEDIA_MOUNTED_READ_ONLY)){//获取扩展存储设备的文件目录File SDFile=android.os.Environment.getExternalStorageDirectory();//创建一个文件File myFile=new File(SDFile.getAbsolutePath()+File.separator+"MyFile.txt");//判断文件是否存在if(myFile.exists()){//读数据FileInputStream inputStream=new FileInputStream(myFile);byte[]buffer=new byte[1024];inputStream.read(buffer);inputStream.close();}}} catch (IOException e) {e.printStackTrace();Log.d("yjw","检查权限");}}

public class FileUtils {static String directoryPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "FileDemo" + File.separator;String fileName = directoryPath + getISO8601TimeFileName() + ".txt";//创建文件夹及文件public void CreateText() throws IOException {File file = new File(directoryPath);if (!file.exists()) {try {//按照指定的路径创建文件夹file.mkdirs();} catch (Exception e) {// TODO: handle exception}}File dir = new File(fileName);if (!dir.exists()) {try {//在指定的文件夹中创建文件dir.createNewFile();} catch (Exception e) {}}}//向已创建的文件中写入数据public void print(String str) {FileWriter fw = null;BufferedWriter bw = null;String datetime = "";try {CreateText();SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd" + " " + "hh:mm:ss");datetime = tempDate.format(new java.util.Date()).toString();fw = new FileWriter(fileName, true);//// 创建FileWriter对象,用来写入字符流/*** 如果想要每次写入,清除之前的内容,使用FileOutputStream流*/bw = new BufferedWriter(fw); // 将缓冲对文件的输出String myreadline = datetime + "[]" + str;bw.write(myreadline + "\n"); // 写入文件bw.newLine();bw.flush(); // 刷新该流的缓冲bw.close();fw.close();} catch (IOException e) {e.printStackTrace();try {bw.close();fw.close();} catch (IOException e1) {}}}/*** 此方法为android程序写入sd文件文件,用到了android-annotation的支持库@** @param buffer   写入文件的内容* @param folder   保存文件的文件夹名称,如log;可为null,默认保存在sd卡根目录* @param fileName 文件名称,默认app_log.txt* @param append   是否追加写入,true为追加写入,false为重写文件* @param autoLine 针对追加模式,true为增加时换行,false为增加时不换行*/public synchronized static void writeFiledToSDCard(@NonNull final byte[] buffer, @Nullable final String folder, @Nullable final String fileName, final boolean append, final boolean autoLine) {new Thread(new Runnable() {@Overridepublic void run() {boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);String folderPath = "";if (sdCardExist) {//TextUtils为android自带的帮助类if (TextUtils.isEmpty(folder)) {//如果folder为空,则直接保存在sd卡的根目录
//                        folderPath = Environment.getExternalStorageDirectory() + File.separator;folderPath = directoryPath;} else {folderPath = Environment.getExternalStorageDirectory() + File.separator + folder + File.separator;}} else {return;}File fileDir = new File(folderPath);if (!fileDir.exists()) {if (!fileDir.mkdirs()) {return;}}File file;//判断文件名是否为空if (TextUtils.isEmpty(fileName)) {file = new File(folderPath + getISO8601TimeFileName() + ".txt");} else {file = new File(folderPath + fileName);}RandomAccessFile raf = null;FileOutputStream out = null;try {if (append) {//如果为追加则在原来的基础上继续写文件raf = new RandomAccessFile(file, "rw");raf.seek(file.length());raf.write(buffer);if (autoLine) {raf.write("\n".getBytes());}} else {//重写文件,覆盖掉原来的数据out = new FileOutputStream(file);out.write(buffer);out.flush();}Log.d("yjw", "writeFiledToSDCard===" + "文件存入成功");} catch (IOException e) {e.printStackTrace();} finally {try {if (raf != null) {raf.close();}if (out != null) {out.close();}} catch (IOException e) {e.printStackTrace();}}}}).start();}public static String getISO8601TimeFileName() {TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");df.setTimeZone(tz);String nowAsISO = df.format(new Date());return nowAsISO;}
}

参考资料:

  • http://blog.csdn.net/androidwifi/article/details/17725989/
  • http://www.docin.com/p-337349877.html
  • https://my.oschina.net/liucundong/blog/288183

Android手机文件系统操作——轻松存储与获取手机文件相关推荐

  1. Android开发 ---如何操作资源目录中的资源文件2

    Android开发 ---如何操作资源目录中的资源文件2 一.颜色资源管理 效果图: 描述: 1.改变字体的背景颜色 2.改变字体颜色 3.改变按钮颜色 4.图像颜色切换 操作描述: 点击(1)中的颜 ...

  2. atitit 破解 拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结

    atitit.破解  拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结 1. 自动获取手机短信方式的原理 1 2. 调用api 1 3. ----核心代码 2 4.  ...

  3. Android开发 亲测可用--多种方式获取手机短信验证码自动填入

    Android开发 静态注册.动态注册.短信中心库监控获取手机验证码,自动复制到剪切板或或填入输入框. 友情提醒初学者:这是广播接收器的类,写在xml中静态注册或写在启动类的Oncreate方法下动态 ...

  4. android通话记录手机号码归属地,mui 获取手机通话记录

    export default { onLoad() { this.log(); // this.msg(); // this.concat(); }, methods: { log() { // 获取 ...

  5. 4.2 手机模拟操作初步尝试(获取登录页面的源代码)

    本节先来初步尝试手机模拟操作,为之后爬取微信朋友圈的实战演练做铺垫. 4.2.1 用Android Studio 连接夜神模拟器 要操控手机App,得先连接到手机.前面安装的夜神模拟器就是用来模拟An ...

  6. android 扫描手机内存和SD卡,获取手机的视频、音频文件。把获取不到的文件扫描出来

    网上查了下android手机扫描内存或者SD卡里面的音频或者视频文件,进行显示.但是有些视频或者音频扫描不出来.有其中一个原因是当你添加了一个视频或者音频文件后,手机自身没有重新进行扫描.只有手机重启 ...

  7. ua获取手机型号_前端通过js获取手机型号

    前段通过js获取手机型号 需求: 用户登录后记录当前的手机型号并记录 插件: 使用步骤: 获取UA信息->根据安卓和IOS不同的处理 IOS再通过插件mobile-device-js去获取型号 ...

  8. android shell检查是否锁屏_ADB获取手机屏幕的状态(点亮与否)以及ADB点击事件基本操作...

    一.文档概述 在对Android设备操作之前,经常需要通过adb获取一些设备基本信息.尤其是在全自动运行过程中,尽量减少人工的干预.本文档记录了检查手机屏幕的状态以及解锁的方式. 二.技术基础 在项目 ...

  9. 双卡android手机SIM卡信息探索 ,获取手机 SIM卡数量和SIM卡id、iccid

    废话不多,直接上干货==> 1 以下所有方法都需要在AndroidManifest.xml声明权限 <uses-permission android:name="android. ...

最新文章

  1. 库克踏春而来,小而美的 iPhone 全新配件问世
  2. T-PAMI 2021 | 换个损失函数就能实现数据扩增?
  3. http请求头状态码
  4. mysql 分表后排序_MySQL优化分库分表,为什么要分表,分表以后如何进行排序查询,业务如何设计?...
  5. 使用java实现面向对象 第七章
  6. css实现数字钟表字体实现 fonts
  7. 四川大学计算机学院保研规定,2020四川大学计算机学院保研夏令营通知
  8. zebradesigner2教程_ZebraDesigner pro 2免费版
  9. java javaw 命令区别_java、javaw和javaws的区别
  10. 如何在 mac os 上双开微信?
  11. 有道云笔记修改主题教程
  12. 计算机通信网自学笔记(1)
  13. 疫情下的春招季:AI面试官已就位,请接招!
  14. 揭秘:古代五大美男的悲惨结局
  15. (附源码)springboot基于微信小程序的校园外卖系统 毕业设计091024
  16. 乱七八糟之处理器天梯图
  17. 什么是Android逆向?如何学习安卓逆向?Android逆向自学笔记入门到实战
  18. 通过AVAudioRecorder获取麦克风接收分贝
  19. Java常用设计模式(一)
  20. C语言过时了?扯淡!

热门文章

  1. 服务器虚拟机内存不足怎么办,[经验]解决vmware的“物理内存不足”
  2. 修改 操作系统 背景 保护视力
  3. CTFShow web入门题刷题记录
  4. 压缩Html HtmlCompressor
  5. 中老铁路国内段首座四线特大桥合龙
  6. 2021-10-21Windows10特定环境下为小地球的解决办法
  7. 企业微信文件分享到微信的坑
  8. matlab中求和函数sum
  9. Get netty的魅力 从核心组件到工作原理
  10. Mirror, STEPN, 魔兽世界: 基于社区和经济系统的Web3应用模式