项目已获得,今天.apk文件以获得另一个非调试手机,发现一个问题。
由于涂料。所以绘图数据的点存储在一个.txt文字档。把它用usb传到指定目录下的,可是明显不科学,由于用户下载了你的.apk文件,你却告诉他,还要把这个文本文件复制到指定的目录下。所以,我就要解决问题。就是把文本文件打包在apk文件里,安装.apk时就让创建一个程序目录。然后把文本文件复制到这个目录目录里,用户执行程序,就能够画图,不用再让他拷贝一份画图的点的坐标的数据。同理,事实上我这里还有设计轨廓的数据和标准轨廓的数据也是要初始时就要存在的。
这里就给了一个方法,用来解决问题。
首先。你要把执行必须的文件命名好,仅仅能是a-z,0-9这36个字符(它是这么提醒我的)组成的文件名称,然后在你的project下新建一个目录raw,一般来说这个目录是没有的,由于这个目录下的文件是不会经过压缩的,而是直接复制到apk文件里,最后把你的文件加入到raw目录中,这样就做好了第一步。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlzaHVjYWk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
类似如上图的创建目录。加入文件就能够了。
加入了文件,那么怎么copy这些文件到指定文件夹下呢?这里有几点,事实上都是文件操作那一块的知识点。第一,推断指定的文件文件夹和文件是否存在,不存在就要先创建。第二。引用raw中的文件;第三。把raw中文件copy到创建的文件里,或者说是raw中文件写到输出流。再把输入流写到手机上创建的文件里。
我这里简单的写了一个函数,函数前两个參数,一个是写入到手机上的文件的文件夹路径,一个是新创建的文件名称字。第三个參数是最重要的,也就是raw中文件是以gen文件夹下的R.java中的id来索引的,就像我们的界面里面的button在程序中引用也是通过id来索引的。这第三个參数是一个int型,就是这个文件的id。R.java中是int型,大家能够看看。这个函数代码例如以下:
private void copyfile(String fileDirPath,String fileName,int id) { String filePath = fileDirPath + "/" + fileName;// 文件路径 try { File dir = new File(fileDirPath);// 文件夹路径 if (!dir.exists()) {// 假设不存在,则创建路径名 dir.mkdirs(); } // 文件夹存在,则将apk中raw文件夹中的须要的文档拷贝到该文件夹下 File file = new File(filePath); if (!file.exists()) {// 文件不存在 InputStream is = getResources().openRawResource( id);// 通过raw得到数据资源 FileOutputStream fs = new FileOutputStream(file); byte[] buffer = new byte[1024]; int count = 0;// 循环写出 while ((count = is.read(buffer)) > 0) { fs.write(buffer, 0, count); } fs.close();// 关闭流 is.close(); } } catch (Exception e) { e.printStackTrace(); } }
我们能够在第一个activity的oncreate方法中调运这个函数。这样安装.apk文件后,第一次打开程序。就创建了指定文件,这个文件是从raw中拷贝过去的。
createFile("/sdcard/test/data","TB60.txt",R.raw.tb60); createFile("/sdcard/test/guikuo","设计轨廓.txt",R.raw.sjgk); createFile("/sdcard/test/guikuo","标准轨廓.txt",R.raw.bzgk);
上面的參数都是自己能够改动的。只是,你安装之后,假设没有执行程序,是不会找到这些目录的。由于这是在第一执行是才创建。接下来执行,它的结论是文件已经存在,无论该交易尚未完成。
其实,这是一个很easy详细信息,它是该文件的操作,但是,有时真的用得到,当然。但不是一个文本文件。音乐文件也可以放在这里面,我们可以更多的尝试。