一、先把assets里面的文件复制到/data/data/.../files/
/**
* 将Asset下的文件复制到/data/data/.../files/目录下
* @param context
* @param fileName
*/
public static boolean copyFromAsset(Context context, String fileName, boolean recreate) {
byte[] buf = new byte[20480];
try {
File fileDir = context.getFilesDir();
if(!fileDir.exists()){
fileDir.mkdirs();
}
String destFilePath = fileDir.getAbsolutePath()+File.separator+fileName;
File destFile = new File(destFilePath);
if(!destFile.exists() || recreate){
destFile.createNewFile();
}else{
return true;
}
FileOutputStream os = new FileOutputStream(destFilePath);// 得到数据库文件的写入流
InputStream is = context.getAssets().open(fileName);// 得到数据库文件的数据流
int cnt = -1;
while ((cnt = is.read(buf)) != -1) {
os.write(buf, 0, cnt);
}
os.flush();
is.close();
os.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
buf = null;
}
}
二、调用方法,先把assets的文件复制到/data/data/.../files/,然后通过getDataFileFullPath获取复制后文件的全路径,最后new File( path )。
public static String getDataFileFullPath(Context context, String fileName){
File fileDir = context.getFilesDir();
String destFilePath = fileDir.getAbsolutePath()+File.separator+fileName;
return destFilePath;
}
public static File finddecodeFactoryTestConfigFile(String file, Context mContext){
File existedFile = null;
String path ;
try {
copyFromAsset(mContext,file, true);
} catch (IOException e) {
e.printStackTrace();
}
path = getDataFileFullPath(mContext,file);
existedFile = new File( path );
if(existedFile.exists()){
return existedFile;
}
return null;
}
三、实际应用
3.1相关代码
3.2 可以看到assets目录下的文件被copy到files目录下面
四、参考文章
android 获取assets内的文件转File - 简书https://www.jianshu.com/p/ff7c530f75fa