开发过程中碰到将文件存储到手机中时,要先判断是否有sd卡,如下所示
// 判断是否有SD卡
private static boolean ExistSDCard() {
if (android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
return true;
} else
return false;
}
如果存在,则要获取sd卡的根目录路径,在目录下创建新的文件夹,sd卡根目录路径如下:
public static String SDCARDPATH = Environment.getExternalStorageDirectory()
.getPath();
然后是将要复制的文件写到sd卡下新建的文件夹内,代码如下:
private void copyzipfileToLocalDir(final String path, final String filename) {
File file = new File(path);
if (file.exists()) {
Uri uri = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setClass(MainActivity.this, TestActivity.class);
startActivity(intent);
return;
}
pdlog = new ProgressDialog(this);
pdlog.setMessage("正在复制文件...");
pdlog.show();
new Thread() {
public void run() {
try {
InputStream input = getApplicationContext().getAssets()
.open(filename);
File f = new File(path);
if (f.exists()) {
return;
}
File file = f.getParentFile();
// SDCARD/CN/ZNsql====================path
if (!file.exists()) {
file.mkdir();
}
FileOutputStream fout = new FileOutputStream(f);
byte[] buff = new byte[1024];
int len = 0;
while ((len = input.read(buff)) > 0) {
fout.write(buff, 0, len);
}
fout.close();
input.close();
} catch (Exception e) {
e.printStackTrace();
}
handler.sendEmptyMessage(1);
};
}.start();
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
if (pdlog != null) {
if (pdlog.isShowing()) {
pdlog.cancel();
}
;
}
// jump
File file = new File(SDCARDPATH+ "androidtest.pdf");
if (file.exists()) {
Uri uri = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setClass(MainActivity.this, TestActivity.class);
startActivity(intent);
}
break;
default:
break;
}
};
};
这样就将assets下的文件写入了外置sd卡,对于一些不支持外置存储卡的Android手机,我们可以将文件写入机身内存,也就是俗称的ROM中,RomPath= Environment.getDataDirectory().getPath();当判断到没有外置sd卡时就可以把path换成这个RomPath即可,这样就完成了将文件写入机身内存中。