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中创建与删除文件权限 --> < ...
随机推荐
- Go语言并发
Go语言并发机制初探 Go 语言相比Java等一个很大的优势就是可以方便地编写并发程序.Go 语言内置了 goroutine 机制,使用goroutine可以快速地开发并发程序, 更好的利用多核处 ...
- UWP 中的各种文件路径(用户、缓存、漫游、安装……)
原文 UWP 中的各种文件路径(用户.缓存.漫游.安装……) UWP 提供了多种不同文件路径访问方式,对应到不同的文件路径中.可能我们只是简单用 ApplicationData.Current 获取一 ...
- Android面HTTP协议发送get要求
/** * 采纳get办法要求 * * @param username * @param password * @return null表示求得的路径有问题,text返回请求得到的数据 */ publ ...
- Plugin execution not covered by lifecycle configuration
Eclipse 环境 在工作空间 \.metadata\.plugins\org.eclipse.m2e.core\ 目录下 增加 lifecycle-mapping-metadata.xml 文件 ...
- .net core使用redis
本地启动redis控制台 && 安装redis服务(用于调试) 1.下载最新版redis,选择.zip则是免安装的版本下载地址:https://github.com/Microsoft ...
- HALCON 光圈和景深的关系
光圈越大,越亮,景深越小 光圈越小,越暗,景深越大 景深为成像清晰的那个范围
- 图像滤镜艺术--PS平均(滤镜-模糊-平均)效果
原文:图像滤镜艺术--PS平均(滤镜-模糊-平均)效果 本文介绍PS中滤镜-模糊-平均模糊的效果实现: 这个效果很简单,原理如下: 1,统计全图像素的R,G,B值得和sumR,sumG,sumB; 2 ...
- WPF ListboxItem 双击事件 Command绑定
<ListBox x:Name="Lb" HorizontalAlignment="Left" Height="600" Vertic ...
- 分布式文件系统的比较,115网盘用了fastdfs
分布式文件系统 分布式文件系统,作为网盘的基础,应用底层文件管理.而分布式文件系统之上,用户文件的权限,用户目录管理都是由非分布式文件系统管理. 分布式文件系统需要关心的主要内容: 文件分布/数据分布 ...
- SQLServer 事务复制中使用脚本添加某个对象的发布
原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec sp_addarticle @publication = N ...