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卡问题小记的更多相关文章

  1. android之写文件到sd卡

    1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  2. [android] 保存文件到SD卡

    /****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...

  3. Android下载文件到SD卡

    HttpURLConnection 上传方式: 尝试理解这两种流的区别: InputStreamReader 的读取方式: //创建一个URL对象 URL url = new URL(urlStrin ...

  4. android保存文件到SD卡中

    想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...

  5. cygwin下烧写文件到sd卡中

    在cygwin下将firmware_sdcard.bin写入到sd卡中(cygwin需要以管理员身份启动) 1查看sd分区情况 cat /proc/partitions  (为了找到sd卡的标记) 2 ...

  6. Android -- 写xml到SD卡中

    信息类                                                                                          private ...

  7. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  8. Android入门开发之SD卡读写操作(转)

    SD卡的读写是我们在开发android 应用程序过程中最常见的操作.下面介绍SD卡的读写操作方式: 1. 获取SD卡的根目录 String  sdCardRoot = Environment.getE ...

  9. Android数据存储之SD卡

    为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件.SD卡大大扩充手机的存储能力. 操作SD首先要加权限: <!--在SDCard中创建与删除文件权限 --> < ...

随机推荐

  1. Android studio中的6大布局

    1.相对布局代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns: ...

  2. Maven软件项目管理工具

    http://my.oschina.net/jgy/blog/125503 拷贝mavne安装文件夹conf以下的settings.xml到用户主文件夹下 改动改文件 <localReposit ...

  3. js 将json字符串转换为json对象

    要引入:jquery-json-2.4.js 在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: JS ...

  4. Coverage数据拓扑

    什么是Coverage?   Coverage数据模型源于ESRI公司1981年推出的第一个商业GIS软件——ArcInfo.也被称为地理相关数据模型(Georelational Data Model ...

  5. 动态加载Dll时,通过Type生成类对象

    原文:动态加载Dll时,通过Type生成类对象 转:http://www.cnblogs.com/zfanlong1314/p/4197383.html "反射"其实就是利用程序集 ...

  6. asp .net core 使用spa

    要求 .net core 2.1 引用包 Microsoft.AspNetCore.SpaServices 先在angular目录下执行 npm i npm run build 关键代码 servic ...

  7. System.Windows.Documents.Run

    希望采用不同的方案来书写文字,可以使用多个TextBlock,也可以使用一个TextBlock+多个Run <TextBlock FontSize="12" Margin=& ...

  8. WPF HeaderedContentControl两个内容属性 Header和Content

    <Window x:Class="XamlTest.Window2"        xmlns="http://schemas.microsoft.com/winf ...

  9. ASP .NET Response类型

    .ContentType .htm,.html Response.ContentType = "text/HTML"; .txt Response.ContentType= &qu ...

  10. JS 中按键处理

    <script type="text/javascript">        //关于键的问题        onload = function () {        ...