首先要记得申请读取sd卡的权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后复制文件是一个比较耗时的操作,一定要放到子线程中去,建议使用AsyncTask
,即使觉得你复制的只是一个有几kb的文件,用不了多少时间,也要养成良好的习惯。
需要用到的对象有:InputStream,OutPutStream,FileOutPutStream
下面上一个大概的代码示例:
new AsyncTask<Void, Void, File>() {
@Override
protected File doInBackground(Void... params) {
FileOutputStream fos = null;
InputStream in = null;
File file = new File(Environment.getExternalStorageDirectory(), FILE_NAME);
try {
//获取输入流
in = getResources().getAssets().open(FILE_NAME);
//输出流
fos = new FileOutputStream(file);
//用来写入的缓冲
byte[] buffer = new byte[1024];
//每次写入的长度
int length;
//将输入流的内容read到buffer中,返回写入的长度,
while ((length = in.read(buffer)) > 0) {
//然后将buffer中的字节流写入到输出流中
fos.write(buffer, 0, length);
}
//最后不要忘了flush();
fos.flush();
//将输入输出流关闭
fos.close();
in.close();
return file;
} catch (IOException e) {
e.printStackTrace();
}
//AsyncTask执行完成后返回结果,这里可以根据具体情况返回相应的内容
return file;
}
@Override
protected void onPostExecute(File imageFile) {
//在这里执行写入完成后的操作。
}
}.execute();