Android获取手机中外置内存卡 内置内存卡 手机内存路径

本文详细介绍了如何在Android应用中获取手机的内部存储、外部存储(外置内存卡和内置内存卡)以及手机内存的路径。通过Context提供的方法如getFilesDir(), getCacheDir(), getDir()等获取内部存储路径,同时提供了在没有获取到有效SD卡时通过读取vold.fstab文件和使用getFilesDir()来确定存储路径的方法。" 12243417,1403488,Linux时间函数详解:clock、times、clock_gettime与gettimeofday,"['Linux系统', '时间管理', '系统编程']
摘要由CSDN通过智能技术生成
               

http://www.open-open.com/code/view/1433585940578

首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下。所有内部存储中保存的文件在用户卸载应用的时候会被删除。

一、 files
1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。
2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInputStream和FileOutputStream对象。
3. Context.fileList(),返回files下所有的文件名,返回的是String[]对象。
4. Context.deleteFile(String),删除files下指定名称的文件。

二、cache
1. Context.getCacheDir(),该方法返回/data/data/youPackageName/cache的File对象。

三、custom dir

getDir(String name, int mode),返回/data/data/youPackageName/下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹

//  获取当前程序路径

    getApplicationContext().getFilesDir().getAbsolutePath();

//  获取该程序的安装包路径
    String path=getApplicationContext().getPackageResourcePath();

//  获取程序默认数据库路径
    getApplicationContext().getDatabasePath(s).getAbsolutePath();

//===============================================

分割线

================================================

获取手机中外置内存卡、内置内存卡、手机内存路径。思路是:先用 Environment.getExternalStorageDirectory()获得外部存储卡路径(某些机型也表现为内部存储卡路径),如没有获 取到有效sd卡插入,则使用安卓的配置文件system/etc/vold.fstab读取全部挂载信息,假如也没有可写入的sd卡,则使用 getFilesDir()方式获得当前应用所在存储路径。为适应不同手机的内存情况,先分三种情况获得可存储路径phonePicsPath,后面代码较长是因为有两个工具类,复制即可,代码如下:


//首先判断是否有外部存储卡,如没有判断是否有内部存储卡,如没有,继续读取应用程序所在存储  if(getExternalSdCardPath() != null){   phonePicsPath = getExternalSdCardPath();  }else{   phonePicsPath = getFilesDir().getAbsolutePath();  }


/**     * 遍历 "system/etc/vold.fstab” 文件,获取全部的Android的挂载点信息     *      * @return     */    private static ArrayList<String> getDevMountList() {        String[] toSearch = FileUtils.readFile("/system/etc/vold.fstab").split(" ");        ArrayList<String> out = new ArrayList<String>();        for (int i = 0; i < toSearch.length; i++) {            if (toSearch[i].contains("dev_mount")) {                if (new File(toSearch[i + 2]).exists()) {                    out.add(toSearch[i + 2]);                }            }        }        return out;    }/**     * 获取扩展SD卡存储目录     *      * 如果有外接的SD卡,并且已挂载,则返回这个外置SD卡目录     * 否则:返回内置SD卡目录     *      * @return     */    public static String getExternalSdCardPath() {         if (SDCardUtils.isMounted()) {            File sdCardFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath());            return sdCardFile.getAbsolutePath();        }         String path = null;         File sdCardFile = null;         ArrayList<String> devMountList = getDevMountList();         for (String devMount : devMountList) {            File file = new File(devMount);             if (file.isDirectory() && file.canWrite()) {                path = file.getAbsolutePath();                 String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date());                File testWritable = new File(path, "test_" + timeStamp);                 if (testWritable.mkdirs()) {                    testWritable.delete();                } else {                    path = null;                }            }        }         if (path != null) {            sdCardFile = new File(path);            return sdCardFile.getAbsolutePath();        }         return null;    }



FileUtils文件:



package com.zqsy.order.tools;/*** * 文件工具类 * @author zhangda * */import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import android.text.TextUtils;/** * File Utils * <ul> * Read or write file * <li>{
    @link #readFile(String)} read file</li> * <li>{
    @link #readFileToList(String)} read file to string list</li> * <li>{
    @link #writeFile(String, String, boolean)} write file from String</li> * <li>{
    @link #writeFile(String, String)} write file from String</li> * <li>{
    @link #writeFile(String, List, boolean)} write file from String List</li> * <li>{
    @link #writeFile(String, List)} write file from String List</li> * <li>{
    @link #writeFile(String, InputStream)} write file</li> * <li>{
    @link #writeFile(String, InputStream, boolean)} write file</li> * <li>{
    @link #writeFile(File, InputStream)} write file</li> * <li>{
    @link #writeFile(File, InputStream, boolean)} write file</li> * </ul> * <ul> * Operate file * <li>{
    @link #moveFile(File, File)} or {
    @link #moveFile(String, String)}</li> * <li>{
    @link #copyFile(String, String)}</li> * <li>{
    @link #getFileExtension(String)}</li> * <li>{
    @link #getFileName(String)}</li> * <li>{
    @link #getFileNameWithoutExtension(String)}</li> * <li>{
    @link #getFileSize(String)}</li> * <li>{
    @link #deleteFile(String)}</li> * <li>{
    @link #isFileExist(String)}</li> * <li>{
    @link #isFolderExist(String)}</li> * <li>{
    @link #makeFolders(String)}</li> * <li>{
    @link #makeDirs(String)}</li> * </ul> *  * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2012-5-12 */public class FileUtils {    public final static String FILE_EXTENSION_SEPARATOR = ".";    private FileUtils() {        throw new AssertionError();    }    /**     * read file     *      * @param filePath     * @param charsetName The name of a supported {
    @link java.nio.charset.Charset </code>charset<code>}     * @return if file not exist, return null, else return content of file     * @throws RuntimeException if an error occurs while operator BufferedReader     */    public static String readFile(String filePath) {     String fileContent = "";        File file = new File(filePath);        if (file == null || !file.isFile()) {            return null;        }        BufferedReader reader = null;        try {            InputStreamReader is = new InputStreamReader(new FileInputStream(file));            reader = new BufferedReader(is);            String line = null;            int i = 0;            while ((line = reader.readLine()) != null) {                fileContent += line + " ";            }            reader.close();            return fileContent;        } catch (IOException e) {         e.printStackTrace();        } finally {            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值