android 写文件到sd卡问题小记
android 写文件到sd卡问题小记
事情是这样子的....
这天我开始编写项目调试工具,高大上不?-----其实就是记录实时网络请求和崩溃日志相关等的小工具(此处一个会心的微笑)。
然后我是这样写的,首先创建一个activity.....废话不多说了,我们直入主题!!!
先看看我做的效果:
就长酱紫!
我的思路大概是这样子的,把网络请求的请求日志和响应日志获取到,然后开启子线程写到文件中,进入调试助手界面时,再去保存网络日志和崩溃日志的文件夹读取文件列表展示出来。
首先,大家都知道,写文件之前肯定要读写权限的。来,我们把它粘贴到AndroidManifest.xml中
<!-- 存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
还有就是android6.0系统以后都需要动态申请所需要的权限,我们去适配一下就好了。(很多机子都是默认给存储权限的,但是华为等部分品牌的机子需要动态申请,所以我们统一动态写一下就好了)。
可能大家直接写好文件路径创建文件会不成功,所以我给大家踩坑了,只需要把父路径创建一下文件夹就行了。代码走起:::
> if (!file.exists()) {
File dir = new File(file.getParent());
dir.mkdirs();
file.createNewFile();
}
好了,我们就可以开始正儿八经的跑起来了!嗯~~~,效果还是挺不错的,我手头的几个机子(8.0,9.0都有)跑起来都很完美,于是乎,我就放心的用了几周![得意][此处有一条翘起来的狗尾巴摇来摇去]
巴特,我有天打包给同事测试,然后打开我们的调试助手界面,纳尼,空空如也,一条记录也没有,什么鬼!
刚开始了解到同事的手机是可以外插一张sd存储卡的,就以为是外置存储卡写文件出现了什么错误,但后来在其他同事朋友的帮忙下试了几个其他可装SD卡的机型,发现有的手机是可以写到内存卡中的,所以我决定借来同事的那个手机来测测。经过我的一番努力(死磨硬泡+贿赂),小哥哥终于肯借给我来调试一波,这样我就开始愉快的耍他的手机。
实践发现,写文件时,会报一个io异常如下:
java.io.IOException: Invalid argument
at java.io.UnixFileSystem.createFileExclusively0(Native Method)
at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:281)
at java.io.File.createNewFile(File.java:1000)
后来在我的n多次测试下,我发现导致出现这个异常的的原因是文件名命名的问题(文件名中有空格和冒号)。
敲黑板!总结一下写文件到存储卡的要点:
1.清单文件中声明读写权限,并且使用时要动态申请。
2.写文件前须得保证其父路径是创建好的。
3.文件命名需要注意,不超过255个字符,避免文件名首字符使用+ - .(避免和隐藏文件混淆),避免文件名使用空格,制表符以及:@#$%[]()*等;此外,“/”是绝不能使用的,因为在android系统里,“/”是创建文件夹的标识。
好了,今天的分享就到此为止,你们get到要点了吗!
android 写文件到sd卡问题小记的更多相关文章
- android之写文件到sd卡
1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...
- [android] 保存文件到SD卡
/****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...
- Android下载文件到SD卡
HttpURLConnection 上传方式: 尝试理解这两种流的区别: InputStreamReader 的读取方式: //创建一个URL对象 URL url = new URL(urlStrin ...
- android保存文件到SD卡中
想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...
- cygwin下烧写文件到sd卡中
在cygwin下将firmware_sdcard.bin写入到sd卡中(cygwin需要以管理员身份启动) 1查看sd分区情况 cat /proc/partitions (为了找到sd卡的标记) 2 ...
- Android -- 写xml到SD卡中
信息类 private ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- Android入门开发之SD卡读写操作(转)
SD卡的读写是我们在开发android 应用程序过程中最常见的操作.下面介绍SD卡的读写操作方式: 1. 获取SD卡的根目录 String sdCardRoot = Environment.getE ...
- Android数据存储之SD卡
为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件.SD卡大大扩充手机的存储能力. 操作SD首先要加权限: <!--在SDCard中创建与删除文件权限 --> < ...
随机推荐
- idea 搭建 SpringBoot 集成 mybatis
编译器:IDEA2018.2.3 环境:win10,jdk1.8,maven3.4 数据库:mysql 5.7 备注:截图较大,如果看不清,可以在图片上右键=>在新标签页中打开 查看高清大图 ...
- Indexing Sensor Data
In particular embodiments, a method includes, from an indexer in a sensor network, accessing a set o ...
- Spring Boot中集成Spring Security 专题
check to see if spring security is applied that the appropriate resources are permitted: @Configurat ...
- options.parse === void 0
if (options.parse === void 0) options.parse = true; https://developer.mozilla.org/zh-CN/docs/Web/Jav ...
- js 将json字符串转换为json对象
要引入:jquery-json-2.4.js 在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: JS ...
- UVA 10869 - Brownie Points II(树阵)
UVA 10869 - Brownie Points II 题目链接 题意:平面上n个点,两个人,第一个人先选一条经过点的垂直x轴的线.然后还有一个人在这条线上穿过的点选一点作垂直该直线的线,然后划分 ...
- HDU 2686 Matrix 3376 Matrix Again(费用流)
HDU 2686 Matrix 题目链接 3376 Matrix Again 题目链接 题意:这两题是一样的,仅仅是数据范围不一样,都是一个矩阵,从左上角走到右下角在从右下角走到左上角能得到最大价值 ...
- ng-zorro 子菜单
效果 代码 // 初始化菜单 // res.menu是一个Menu数组 // 在后端创建子菜单 res.menu.push({ text: "", i18n: "子菜单& ...
- x86汇编指令脚本虚拟机
简介 这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机. 非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用.能用.轻量就行,如果觉得代码架构设计的不是很好的话 ...
- WPF 绑定父类属性
原文:WPF 绑定父类属性 1.绑定父控件的属性. <ContextMenu x:Key="ContextMenuColoum"> <MenuItem Heade ...