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. 一句话的设计模式(JAVA版)

    ·结构型模式: o适配器:用来把一个接口转化成另一个接口,如 java.util.Arrays#asList(). o桥接模式:这个模式将抽象和抽象操作的实现进行了解耦,这样使得抽象和实现可以独立地变 ...

  2. lzugis——Arcgis Server for JavaScript API在自己的定义InfoWindow

    你看到这个标题嫌烦.因为我最近一直与研究问题,相关文章使这些也可以只,同时要读我文章的朋友.我的文章能够给你带来帮助. 在相关的内部的前两篇文章,达到InfoWindow经div实现的东西,成Info ...

  3. QT之QSignalMapper(可以理解为转发器,多个按钮绑定到一个Edit上,且能分辨。每个单独连接的话,反而麻烦)

    QT之QSignalMapper QT之QSignalMapper 简述 效果图 上代码 相关知识点文章 结尾 简述 QSignalMapper我们可以理解为转发器,此话怎讲呢?比如,按钮点击的响应槽 ...

  4. CentOS(一) 最小化安装

    /etc/sysconfig/selinux 关闭selinux /etc/sysconfig/network-scripts/网卡   设置onboot=yes service network re ...

  5. 在Eclipse安装ADT

    Eclipse 3.4 (Ganymede) 启动 Eclipse,然后选择 Help > Software Updates….在出现的对话框中.单击 Available Software 选项 ...

  6. SIIA CODIE AWARDS 2017

    Business Technology Best Advertising or Campaign Management Platform Albert, Albert Choozle, Choozle ...

  7. 王立平--RemoteView

    RemoteView它将在两个地方被使用:一个是在AppWidget,另外一个是在Notification. RemoteView是用来描写叙述一个垮进程显示的view 1.AppWidget---R ...

  8. WPF Datagrid with some read-only rows - Stack Overflow

    原文:WPF Datagrid with some read-only rows - Stack Overflow up vote 21 down vote accepted I had the sa ...

  9. DataGridView 鼠标双击获得行列索引

    如果是CellDoubleClick事件,可以在事件的参数e里获取列索引及行索引.也可以通过CurrentCell来获取当前选中的单元格的列索引及行索引.参考:private void dataGri ...

  10. C# Winform制作虚拟键盘,支持中文

    原文:C# Winform制作虚拟键盘,支持中文           最近在做一个虚拟键盘功能,代替鼠标键盘操作,效果如下:        实现思路:          1  构建中文-拼音 数据库, ...