今晚刚好帮一个朋友写了这个小demo,觉得网上可能比较少。因此随便水一篇博客。XD~
以下以获取图片文件为例,text等其他文件也是同样的获取。
整体流程是(感觉CSDN流程图有bug)
第一步:
获取asset文件流
第二步(有时可跳过这层)s:
中间转化层,转化为中间文件类型,如图片就是bitmap
第三步:
将中间文件存入本地sd卡,或直接将asset文件流存入本地SdCard
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getFileFromAsset("diaolin.png");
}
/*
* 获取Asset内的文件夹
* @param fileName 必须是完整文件名(文件名+格式)
*/
private void getFileFromAsset(String fileName) {
InputStream fileStream = null;
try {
//获取指定Assets文件流
fileStream = getResources().getAssets().open(fileName);
//转化为bitmap对象
Bitmap bitmap = BitmapFactory.decodeStream(fileStream);
saveInSdCard(fileName, bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* 保存到sb卡内
* @param fileName 必须是完整文件名(文件名+格式)
* @param bitmap
*/
private void saveInSdCard(String filename, Bitmap bitmap) throws IOException {
//检查是否存在sd卡
String status = Environment.getExternalStorageState();
if (!status.equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(this, "请插入sd卡", Toast.LENGTH_LONG).show();
return;
}
/*
* 在Android中1.5、1.6的sdcard目录为/sdcard,而Android2.0以上都是/mnt/sdcard,因此如果我们在保存时直接写具体目录会不妥,因此我们可以使用:
* Environment.getExternalStorageDirectory();获取sdcard目录;
*/
String directory = Environment.getExternalStorageDirectory().toString() + "/lindiSecret";
File rootFile = new File(directory);
//如不存在文件夹,则新建文件夹
if (!rootFile.exists())
rootFile.mkdir();
//在文件夹下加入获取的文件
File file = new File(directory, filename);
try {
//文件输出流
FileOutputStream out = new FileOutputStream(file);
//bitmp压缩到本地,原图就100
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
最后别忘了,添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
看不明白的朋友,以下是下载链接
http://download.csdn.net/detail/u011435746/9101705