android SD卡目录下创建、复制文件夹以及文件
2016-05-27 12:00
681 查看
声明SD卡权限
<!-- 允许程序访问外部存储设备 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 允许创建和删除外部存储设备的文件 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
特别注意特别注意特别注意的坑
虽然声明了权限,但在运行过程会有异常,如下:java.io.IOException: open failed: EACCES (Permission denied)
不要急,看下你是不是在应用设置的android:targetSdkVersion=”23”
改成22或以下就可以了,android:targetSdkVersion=”22”,具体原因查资料:
No declaring the permission is not enough when targeting Api23.
在SD卡下创建文件夹
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //SD卡可挂载 //获取扩展存储设备的文件目录 File rootFile = Environment.getExternalStorageDirectory(); String tmpFilePath = rootFile.getPath() + "/yuTest"; File tmpFile = new File(tmpFilePath); if (!tmpFile.exists()) { tmpFile.mkdir(); } else { Log.i(TAG, "tmpFile exists"); } }
附:
1)其实创建文件夹,就是创建一个目录(路径),所以用public File(String path)构造方法,表示构建新的File的路径
2)file.mkdir():创建此抽象路径名称指定的目录,只能创建一级目录,且父目录必须存在
3)file.mkdirs():创建此抽象路径指定的目录,可以创建多级目录,父目录可以不存在
在SD卡下创建文件
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { File txtFile = new File (Environment.getExternalStorageDirectory(), "text.txt"); if (!txtFile.exists()) { try { FileOutputStream outputStream = new FileOutputStream(txtFile); outputStream.write("hello".getBytes()); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
附:
1)public File(File dir, String name):File表示构建新的File的路径,name表示构建新的File的名字
2)public FileOutputStream (File file):创建一个文件,并向文件中写数据,如果该流在打开文件进行输出前,目标文件不存在,该流会自己创建目标文件
复制文件夹
public static int copyFile(String fromFilePath, String toFilePath) { File fromFile = new File(fromFilePath); if (!fromFile.exists()) { return -1; } //获取子文件 File[] fromFiles = fromFile.listFiles(); File toFile = new File(toFilePath); if (!toFile.exists()) { toFile.mkdirs(); } for (int i = 0; i < fromFiles.length; i++) { if (fromFiles[i].isDirectory()) { // 子文件是目录,循环 copyFile(fromFiles[i].getPath(), toFilePath + "/" + fromFiles[i].getName()); } else { //复制文件 copyDirFile(fromFiles[i].getPath(), toFilePath + "/" + fromFiles[i].getName()); } } return 0; } public static int copyDirFile(String fromFilePath, String toFilePath) { try { InputStream inStream = new FileInputStream(fromFilePath); OutputStream outStream = new FileOutputStream(toFilePath); byte[] bytes = new byte[1024]; int i = 0; while ((i = inStream.read(bytes)) > 0) { outStream.write(bytes, 0, i); } inStream.close(); outStream.close(); return 0; } catch (Exception e) { e.printStackTrace(); return -1; } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories