Android手机自带内部存储路径的获取 原文地址:http://my.oschina.net/liucundong/blog/288183

直接贴代码:

 public static String getExternalSdCardPath() {

        if (SDCardUtils.isSDCardEnable()) {
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;
}
//读文件
public static String readFile(String fileName) { try {
File file = new File(fileName); FileInputStream fis = new FileInputStream(file); int length = fis.available(); byte [] buffer = new byte[length];
fis.read(buffer); String res = EncodingUtils.getString(buffer, "UTF-8"); fis.close();
return res;
}
catch (Exception ex)
{
ex.printStackTrace();
return null;
} } private static ArrayList<String> getDevMountList() {
String[] toSearch = readFile("/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卡了。日志类非常简单,就一个方法,自己debug的时候用,把结果输出出来。

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Environment; /**
* 日志打印类,提供了一个开关来决定是否打印日志
*/
public class Logger
{
private final static SimpleDateFormat DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final SimpleDateFormat PATHFORMATE =new SimpleDateFormat("yyyyMMdd");
private static final SimpleDateFormat PATHFORMATE1 = new SimpleDateFormat("HH");
private static boolean IsRecord=true;//是否记录日志 //存储卡目录和手机内部目录
private static final String ExternalStorePath = FileUtil.getExternalSdCardPath()+"nanbeiyoulog"
+File.separator+PATHFORMATE.format(new Date())+File.separator;
private static final String FileName = PATHFORMATE1.format(new Date())+".txt"; public static void d(String tag,String msg)
{
if(IsRecord)
{
try {
SaveToSD(tag,msg);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
} private static void SaveToSD(String tag,String msg)
{
try{
File path = new File(ExternalStorePath);
if(!path.exists())
{
path.mkdirs();
}
File mLogFile = new File(ExternalStorePath+FileName);
if(!mLogFile.exists())
{
mLogFile.createNewFile();
} StringBuffer sb = new StringBuffer();
sb.append(DATEFORMAT.format(new Date()));
sb.append(": ");
sb.append("DEBUG");
sb.append(": ");
sb.append(tag);
sb.append(": ");
sb.append(msg);
sb.append("\n");
RandomAccessFile raf = null;
try
{
raf = new RandomAccessFile(mLogFile, "rw");
raf.seek(mLogFile.length());
raf.write(sb.toString().getBytes("UTF-8"));
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace(); }
catch (IOException e)
{
e.printStackTrace(); }
finally
{
if(raf != null)
{
try
{
raf.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
} }

android Loger日志类(获取内置sd卡)的更多相关文章

  1. Android开发获取多个存储空间的路径(内置SD卡以及外置SD卡)

    Android开发中经常会遇到多存储空间的问题,包括内置存储路径以及外置SD卡,而且有的时候会有多张外置SD卡,此时就需要获取不同的SD卡路径,然后根据需要来写入或者读出文件. 此处给出常用的SD卡工 ...

  2. 关于手机的内置SD卡与外置SD卡

    对于安卓2.3的系统来说,Environment.getExternalStorageDirectory()获取的目录是内置SD卡还是外置SD卡是无法保证的, 和手机厂商的修改有关,只能通过Envir ...

  3. 把外置sd卡映射为内置sd卡地一个目录

    教程:1.已root机器运行re浏览器2.在/sdcard卡上创建目录sd-ext3.找到/etc/rc.local,长按选编辑4.拉到文件最后,在最后一行exit 0前行添加:     (sleep ...

  4. android获取内置和外置SD卡路径 - z

    本文将介绍Android真机环境下如何获取内置和外置SD卡路径. 测试环境:三星Note3,其他手机待测试... 所需权限(AndroidManifest.xml文件里) <uses-permi ...

  5. android4.0 中关于内外置sd卡的获取及读写权限问题

    from://http://blog.chinaunix.net/uid-26727976-id-3146895.html 在2.x的版本中,在manifest中配置的权限android.permis ...

  6. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

  7. Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...

  8. Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类

    Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. package com.qiyu.ddb.util; import android.anno ...

  9. day28 面向对象:反射,内置函数,类的内置方法

    面向对象进阶博客地址链接: http://www.cnblogs.com/Eva-J/articles/7351812.html 复习昨日内容: # 包 # 开发规范 # # hashlib # 登录 ...

随机推荐

  1. [z]CAP原理和BASE思想

    分布式领域CAP理论,Consistency(一致性), 数据一致更新,所有数据变动都是同步的Availability(可用性), 好的响应性能Partition tolerance(分区容错性) 可 ...

  2. nginx/apache/php隐藏http头部版本信息的实现方法

    有时候我们需要隐藏我们的服务器版本信息,防止有心人士的研究,更安全,这里介绍下在nginx/apache/php中如何隐藏http头部版本信息的方法. nginx隐藏头部版本信息方法 编辑nginx. ...

  3. Xamarin.Android 入门之:xamarin使用webserver和html交互

    一.引言 如今,Android+html5开发已经成为最流行的开发模式. Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设 ...

  4. QEvent大全,有中文解释

    简述 QEvent 类是所有事件类的基类,事件对象包含事件参数. Qt 的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件,将它们转化为 QEvents, ...

  5. Android Andbase应用开发框架

    [运行说明]运行AndbaseDemo需要将文件中的Andbase库Add进demo中.1.andbase中包含了大量的开发常用手段.如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片 ...

  6. java中文排序

    对中文名称进行排序,不多说,上代码 package test; /** * @Title: Person.java * @Copyright: Copyright (c) 2012-11-19 * @ ...

  7. iOS开原项目

    http://www.lanrenios.com/ios/project/2013/0729/1433.html http://www.cnblogs.com/xiaobaizhu/archive/2 ...

  8. HDFS 小文件处理——应用程序实现

    在真实环境中,处理日志的时候,会有很多小的碎文件,但是文件总量又是很大.普通的应用程序用来处理已经很麻烦了,或者说处理不了,这个时候需要对小文件进行一些特殊的处理——合并. 在这通过编写java应用程 ...

  9. 1109. Conference(二分图)

    1109 二分图的模板题 不过这题题意 我纠结了好久 不知道是不是我对二分图不熟悉的原因 这题就是说 有n+m个人参加会议 要在这n+m中进行通话 求最少的连接数 就是每个人都得被连接上 这样求最大匹 ...

  10. createElement 创建DOM元素

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...