APK安装时如何拷贝apk里的文件到sdcard

来源:互联网 发布:汇川plc编程手册pdf 编辑:程序博客网 时间:2024/05/18 02:15

一、效果:

安装apk到用户手机上时在用户的SDCard创建文件夹(其实就是建立你唯一的应用的目录咯),以及复制一些你不想编译而有用的文件到你的目录下!

 

二、关键点:

1、得到sdcard的路径:Android.os.Environment.getExternalStorageDirectory().getAbsolutePath()一般都会得到路径“/mnt/sdcard"

2、将你需要复制到用户sdcard的文件放到android代码res/raw路径如”res/raw/flycatdeng.txt",放在raw中的文件不会被编译。通过getResources().openRawResource(R.raw.flycatdeng);方式来获得这个资源,返回InputStream输入流。

3、得到目录或文件 File file=new File(String path); 判断是否有这个文件或目录file.exists(),返回true则表示存在;

4、如果目录不存在则需要创建目录(文件夹),file.mkdirs();//这里非常需要注意,如果是只有一个文件夹的话可以用mkdir(),但是如果你要再文件夹中还要有文件夹的话则需要用到mkdirs()

5、输入输出文件流,可见以下代码

6、最最最关键的是一定要在AndroidManifest.xml文件中配置添加用户权限:

sdcard创建和删除的文件的权限:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

sdcard文件写入内容的权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

三、源码:

Java代码  收藏代码
  1. public class MainActivity extends Activity {  
  2.     private String fileDirPath = android.os.Environment  
  3.             .getExternalStorageDirectory().getAbsolutePath()// 得到外部存储卡的数据库的路径名  
  4.             + "/Mulu01/Mulu02/Mulu03";// 我要存储的目录  
  5.     private String fileName = "flycatdeng.txt";// 要存储的文件名  
  6.   
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.         createFile();// 创建目录及文件  
  12.     }  
  13.   
  14.     private void createFile() {  
  15.         String filePath = fileDirPath + "/" + fileName;// 文件路径  
  16.         try {  
  17.             File dir = new File(fileDirPath);// 目录路径  
  18.             if (!dir.exists()) {// 如果不存在,则创建路径名  
  19.                 System.out.println("要存储的目录不存在");  
  20.                 if (dir.mkdirs()) {// 创建该路径名,返回true则表示创建成功  
  21.                     System.out.println("已经创建文件存储目录");  
  22.                 } else {  
  23.                     System.out.println("创建目录失败");  
  24.                 }  
  25.             }  
  26.             // 目录存在,则将apk中raw中的需要的文档复制到该目录下  
  27.             File file = new File(filePath);  
  28.             if (!file.exists()) {// 文件不存在  
  29.                 System.out.println("要打开的文件不存在");  
  30.                 InputStream ins = getResources().openRawResource(  
  31.                         R.raw.flycatdeng);// 通过raw得到数据资源  
  32.                 System.out.println("开始读入");  
  33.                 FileOutputStream fos = new FileOutputStream(file);  
  34.                 System.out.println("开始写出");  
  35.                 byte[] buffer = new byte[8192];  
  36.                 int count = 0;// 循环写出  
  37.                 while ((count = ins.read(buffer)) > 0) {  
  38.                     fos.write(buffer, 0, count);  
  39.                 }  
  40.                 System.out.println("已经创建该文件");  
  41.                 fos.close();// 关闭流  
  42.                 ins.close();  
  43.             }  
  44.         } catch (Exception e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.     }  
  48. }  
0 0
原创粉丝点击