apk安装时把程序附带文件拷贝到手机指定目录下

项目已搞定,今天把.apk文件弄到另外一台非调试手机上用,发现一个问题。因为要画图,所以绘图的点的数据保存在一个.txt的文本文件中,上次直接把它用usb传到指定文件夹下的,但是明显不科学,因为用户下载了你的.apk文件,你却告诉他,还要把这个文本文件拷贝到指定的文件夹下,所以,我就要解决这个问题,就是把文本文件打包在apk文件中,安装.apk时就让创建一个程序文件夹,然后把文本文件拷贝到这个目录文件夹里,用户运行程序,就可以绘图,不用再让他拷贝一份绘图的点的坐标的数据。同理,其实我这里还有设计轨廓的数据和标准轨廓的数据也是要初始时就要存在的。

这里就给了一个方法,用来解决这个问题。

首先,你要把运行必须的文件命名好,只能是a-z,0-9这36个字符(它是这么提醒我的)组成的文件名,然后在你的工程下新建一个文件夹raw,一般来说这个文件夹是没有的,因为这个文件夹下的文件是不会经过压缩的,而是直接拷贝到apk文件中,最后把你的文件添加到raw文件夹中,这样就做好了第一步。

类似如上图的创建文件夹,添加文件就可以了。

添加了文件,那么怎么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);

上面的参数都是自己可以修改的。不过,你安装之后,如果没有运行程序,是不会找到这些文件夹的,因为这是在第一运行是才创建,下次运行,判断文件已存在,就不做任何处理了。

其实,这是一个很简单的细节,就是对文件的操作,不过有时还真的用得到,当然,不仅仅是文本文件,音乐文件也是可以放在这里面的,大家可以多尝试一下。

apk安装时把程序附带文件拷贝到手机指定目录下,布布扣,bubuko.com

时间: 2024-08-02 10:57:08

apk安装时把程序附带文件拷贝到手机指定目录下的相关文章

Batch 拷贝远程机器文件到本机指定目录下

net use * /del /yesNET USE Y: \\远程机IP\d$  登录密码 /user:domain\登录用户 set sourcePath="Y:\DOAutomationTest\automation_do_scriptlibrary_soapui\Compare Test and Benchmark Environment\Version 1\direct"set targetPath1="C:\Program Files\SmartBear\Read

apk当安装程序将文件复制到手机自带的指定文件夹

项目已获得,今天.apk文件以获得另一个非调试手机,发现一个问题. 由于涂料.所以绘图数据的点存储在一个.txt文字档.把它用usb传到指定目录下的,可是明显不科学,由于用户下载了你的.apk文件,你却告诉他,还要把这个文本文件复制到指定的目录下.所以,我就要解决问题.就是把文本文件打包在apk文件里,安装.apk时就让创建一个程序目录.然后把文本文件复制到这个目录目录里,用户执行程序,就能够画图,不用再让他拷贝一份画图的点的坐标的数据.同理,事实上我这里还有设计轨廓的数据和标准轨廓的数据也是要

编写一个程序,将 d: \ java 目录下的所有.java 文件复制到d: \ jad 目录下,并 将原来文件的扩展名从.java 改为.jad

1.编写一个程序,将 d: \ java 目录下的所有.java 文件复制到d: \ jad 目录下,并 将原来文件的扩展名从.java 改为.jad package copy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; i

统计指定目录下所有mp4文件的时长(包含子目录下的文件)

1 # -*- coding:utf-8 -*- 2 # Author :Zcb 3 4 import os 5 from moviepy.editor import VideoFileClip 6 7 file_Dir = u"e:\\test" #加个u 是表示unicode 一般用在中文字符前 8 sum_time =0 9 10 class FileCheck(): 11 def __init__(self): 12 self.file_dir = file_Dir 13 14

安卓安装完应用后,如何获取包的meta-inf目录下的文件?

============问题描述============ 安卓安装完应用后,可以获取包的meta-inf目录下的文件吗? 在手机上安装完了应用后,然后打开应用,此时,应用里的SDK有没有办法取到应用包里的meta-inf文件? 为什么要这么做? 因为同一个应用包,需要往里面打不同的渠道ID. 然后又要保持签名一致. 这个时候需要往meta-inf里面写文件,因为这样不会影响到签名. 但是问题来了,如果一两个渠道还好,可以手工把渠道ID打到SDK里就可以,但是一旦渠道太多,应用太多的话,不可能手工

linux下自动ftp到服务器对比拷贝指定目录下文件

#!/bin/bash process=8 PWD=`pwd` DAT=`date` ftpip="192.168.1.1" user="ftp_username" password="ftp_password" local_dir="/home/" getlist() { ftp -n $ftpip <<EOF |awk '{print $9}'|sed '/^$/d' >$PWD/list user $u

linux复制指定目录下的全部文件到另一个目录中

linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir2.怎样才能将dir1下所有文件复制到dir2下了如果dir2目录不存在,则可以直接使用cp -r dir1 dir2即可.如果dir2目录已存在,则需要使用cp -r dir1/. dir2如果这时使用cp -r dir1 dir2,则也会将dir1目录复制到dir2中,明显不符合要求.ps:di

linux复制指定目录下的全部文件到另一个目录

linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir2.怎样才能将dir1下所有文件复制到dir2下了如果dir2目录不存在,则可以直接使用cp -r dir1 dir2即可.如果dir2目录已存在,则需要使用cp -r dir1/. dir2如果这时使用cp -r dir1 dir2,则也会将dir1目录复制到dir2中,明显不符合要求.ps:di

Linux使用find查找最后修改时间超过三天的文件并移动到指定目录

使用场景:应用程序,如tomcat,每天都会生成新的日志文件,时间一长,占用大量的磁盘,需要定期清理这些文件. 代码如下: find /tomcat/logs/*.log -ctime +3 -exec mv {} /tmp 也可以使用xargs传参数 find /tomcat/logs/*.log -ctime +3 | xargs mv {} /tmp 说明:将指定目录下超过3天未修改的日志文件移动到tmp中. 如果要直接删除,将命令改为如下即可: find /tomcat/logs/*.l