最近在新玩项目,啥需求都没有,不过咱可以先搞界面,于是,先用虚拟数据吧界面搞定,然后就想到了用assets下放json,也可以在res下创建一个raw的文件,突然发现居然忘了怎么写,然后就在这做笔记了
assets和Raw区别
这个大家应该都懂得
assets
InputStream mAssets = getAssets().open("name.json");
RAW
InputStream mRaw = getResources().openRawResource(R.id.xxx);
相同:
这两个文件夹下的东西在打包APK的时候会原封不动的打包进去,不会被编译成二进制。
区别:
assets下可以在创建目录,也可以动态的列出assets下的所有资源文件
String[] list = getAssets().list(String path);
而Raw下无法创建子文件夹。
获取assets下的文件
private String getAssetsData() {
String result = "";
try {
//获取输入流
InputStream mAssets = getAssets().open("name.txt");
//获取文件的字节数
int lenght = mAssets.available();
//创建byte数组
byte[] buffer = new byte[lenght];
//将文件中的数据写入到字节数组中
mAssets.read(buffer);
mAssets.close();
result = new String(buffer);
return result;
} catch (IOException e) {
e.printStackTrace();
Log.e("fuck", "error");
return result;
}
}
注意:千万别再Android studio新建错位置了,android studio是在main下创建assets
获取Raw下的文件
private String getRawData() {
String result = "";
try {
//获取输入流
InputStream mRaw = getResources().openRawResource(R.raw.sample);
//获取文件的字节数
int lenght = mRaw.available();
//创建byte数组
byte[] buffer = new byte[lenght];
//将文件中的数据写入到字节数组中
mRaw.read(buffer);
mRaw.close();
result = new String(buffer);
return result;
} catch (IOException e) {
e.printStackTrace();
Log.e("fuck", "error");
return result;
}
}
assets目录下的其他获取方式
1、加载assets下的网页、js等
webView.loadUrl("file:///android_asset/html/index.html");
2、加载assets目录下的图片资源
InputStream is = getAssets().open(meinv.png);
bitmap = BitmapFactory.decodeStream(is);
ivImg.setImageBitmap(bitmap);
3、assets目录下的音乐
// 打开指定音乐文件,获取assets目录下指定文件的AssetFileDescriptor对象
AssetFileDescriptor afd = am.openFd(music);
mPlayer.reset();
// 使用MediaPlayer加载指定的声音文件。
mPlayer.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
// 准备声音
mPlayer.prepare();
// 播放
mPlayer.start();
4、将assets下的文件复制到SD卡中
/**
* 从assets目录中复制整个文件夹内容
* @param context Context 使用CopyFiles类的Activity
* @param oldPath String 原文件路径 如:/aa
* @param newPath String 复制后路径 如:xx:/bb/cc
*/
public void copyFilesFassets(Context context,String oldPath,String newPath) {
try {
String fileNames[] = context.getAssets().list(oldPath);//获取assets目录下的所有文件及目录名
if (fileNames.length > 0) {//如果是目录
File file = new File(newPath);
file.mkdirs();//如果文件夹不存在,则递归
for (String fileName : fileNames) {
copyFilesFassets(context,oldPath + File.separator + fileName,newPath+File.separator+fileName);
}
} else {//如果是文件
InputStream is = context.getAssets().open(oldPath);
FileOutputStream fos = new FileOutputStream(new File(newPath));
byte[] buffer = new byte[1024];
int byteCount=0;
while((byteCount=is.read(buffer))!=-1) {//循环从输入流读取 buffer字节
fos.write(buffer, 0, byteCount);//将读取的输入流写入到输出流
}
fos.flush();//刷新缓冲区
is.close();
fos.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//如果捕捉到错误则通知UI线程
MainActivity.handler.sendEmptyMessage(COPY_FALSE);
}
}
一般情况下我们的小型数据库如果放在assets下就先复制到SD卡中,然后从sd卡中读取。
暂时只能补充这么多了,有时候就是这样,书到用时方恨少啊,人脑不是硬盘,记不住就记笔记,后续在接着补充,欢迎各位大神指点,小弟感激不尽。