/**

* 此方法为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 writeFileToSDCard(@NonNull final byte[] buffer, @Nullable final String folder,

@Nullable final String fileName, final boolean append, final boolean autoLine) {

new Thread(new Runnable() {

@Override

public 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;

} 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 + "app_log.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();

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (raf != null) {

raf.close();

}

if (out != null) {

out.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}).start();

}

android文件追加,Android 写文件 复写和追加 两种方式相关推荐

  1. android通用listview和gridview万能适配器实现的两种方式

    Listview和gridview是超级常用组件,于是乎,应该封装一下直接拿来用用而不是每次都写Adapter,这样多么的麻烦是不.虽然国内外大牛都有封装过,但是我总结了两个封装好的Adapter分享 ...

  2. Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是 ...

  3. Linux中vim编辑文件显示行号(临时和永久两种方式)

    一.前言   在Linux中经常使用vim编辑器去修改文件,默认是不显示行号的,那如何显示呢?有临时和永久两种方式.     本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错, ...

  4. win7使用android字体文件,字体在哪个文件夹里 win7怎么安装新字体(两种方式)

    对于系统的字体,我们一般都是作为精简系统的选择,为例节省系统盘的空间,把多余的字体都给处理掉,但是做设计师.编辑等职业因为工作需求,用到的字体会很多,所以就需要安装大量的字体.那么自己到底存放在那个文 ...

  5. DWG文件怎么转成PDF格式?介绍两种方式

    室内设计的小伙伴常常接触DWG格式文件,而为了便于保存及分享,大家一般会把DWG转换成更稳定的PDF文件,那么如何将DWG格式转换成PDF文件呢?如果你经常接触CAD图纸,不妨了解一下这两个转换软件. ...

  6. Android获取短信验证码并自动填充的两种方式

    有些项目为了方便客户操作,减去客户输入短信验证码的时间,会要求安卓app能够获取收到的短信验证码并自动填充到输入框.所以,我整理了安卓获取短信验证码并自动填充输入框的两种方法,而且正式在项目中使用并无 ...

  7. android按钮添加音效,Android------Button 添加声音效果(两种方式)

    我在先前的案例<Android 的底部导航栏 BottomNavigationBar>中添加以底部 的4个按钮切换添加声音 下来看看案例效果图 使用添加依赖 compile 'com.as ...

  8. android 手机,连接蓝牙耳机连接不成功;两种方式都连接失败

    第一种连接方式,使用反射类,连接不成功: Method m = null;                                 try {                          ...

  9. 写磁盘与缓存的两种方式

    wirte-back: 数据线写入缓存,稍后再被刷入磁盘: write-through: 数据被立即写入磁盘,另外也会在缓存保存一份(用来提升读性能). 备注: 图中的cache缓存的不是文件而是块( ...

  10. 创建和应用Java包文件的两种方式

    <Java编程艺术>章节选登.作者:高永强 清华大学出版社 (即将出版) 12.1  包--package       包是Java提供的文件管理机制.包把功能相似的类,按照Java的名字 ...

最新文章

  1. QML UI 与逻辑分开
  2. es 调整gc_实际中进行GC调整
  3. qt中设置QCheckBox的文本与勾选框之间的距离
  4. VMware Workstation不可恢复错误: (vcpu-0)
  5. virtualbox使用手记
  6. Python3 学习
  7. BZOJ 4415 洛谷 3988 [Shoi2013]发牌
  8. H264--H264解码--5
  9. c语言打印%-6llu,C语言-输出指定个数的质数
  10. 【ELAMN预测】基于布谷鸟算法优化ELMAN神经网络实现数据回归预测matlab代码
  11. 管家婆普及版安装问题
  12. 分享一个超详细的数据分析案例【Python】附ABTest详细介绍
  13. 一张图读懂系列|量子三大特性之纠缠
  14. html设计判断闰年,javascript如何判断是否为闰年?
  15. 基于java学生信息管理系统
  16. Dreamweaver cs 6无法添加浏览器 亲测有效!!!
  17. 流处理引擎:ksql
  18. 随机生成11位的电话号码
  19. UrlRewriter.NET 与 UrlRewrittingNet.UrlRewriter比较
  20. 学术会议 Rebuttal 模板资料留存

热门文章

  1. 改变世界的物理学--(2)物理学孕育新材料
  2. 【观点】从平台经济到平台经济学
  3. 网站接入QQ登录过程(防踩坑)
  4. 那些神仙操作的硬核公司-2
  5. oracle mysql 中文排序规则_ORACLE对中文排序性能优化
  6. 【英文原著 02】- The Lion the witch and the wardrobe
  7. 修复Patran Skin GUI无法启动的问题
  8. 我的周刊(第075期)
  9. mysql 5.6l安装教程,Mysql中MyISAM引擎和InnoDB引擎的比较
  10. 青村茶舍||“麦穗飘香”文旅推介直播活动