android将raw或者assets中的文件复制到手机中
来源:互联网 发布:黑色星期天 知乎 编辑:程序博客网 时间:2024/04/29 15:42
每个应用程序可能都会有程序本身携带的数据,
有的是txt文本,有的是db数据库,有的是具体的一些文件,那么如何从程序中得到文件呢
方法一:
该方式是将数据库db文件放到res/raw中,在获取的时候将文件写入到手机的sd卡中,
建立数据库的时候可以调用
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);得到数据库
具体代码如下:
public class ParentActivity extends Activity
{
protected final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath()+ "/dictionary";
protected final String DATABASE_FILENAME = "dictionary.db";
protected SQLiteDatabase database;
protected SQLiteDatabase openDatabase()
{
try
{
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
if (!dir.exists())
dir.mkdir();
if (!(new File(databaseFilename)).exists())
{
Log.d("aa", "bbb");
InputStream is = getResources().openRawResource(
R.raw.dictionary);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0)
{
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
databaseFilename, null);
return database;
}
catch (Exception e)
{
}
return null;
}
}
方法二:
文件被放在了assets中,然后加载到手机内存rom中的data中
public class DB_Copy {
private Context mContext;
private String mDB_PATH;
private String mDATABASE_NAME = "";
public DB_Copy(Context context, String dbFileName) {
mContext = context;
mDB_PATH = "/data/data/" + mContext.getPackageName() + "/databases/";
mDATABASE_NAME = dbFileName;
}
/**
* 判断数据库文件是否存在
*
* @return
*/
public boolean isDataBaseExist() {
File dbFile = new File(mDB_PATH + mDATABASE_NAME);
return dbFile.exists();
}
/**
* 删除数据库文件
*/
public void delteFile(){
String collectName = mDB_PATH + mDATABASE_NAME;
File collectFile = new File(collectName);
collectFile.delete();
}
/**
* 存储数据库文件
*/
public voidcopyDataBase() {
try {
InputStream myInput = mContext.getAssets().open("databases/" + mDATABASE_NAME);
String outFileName = mDB_PATH + mDATABASE_NAME;
File file = new File(outFileName);
if(file.exists()){
file.delete();
}
file.createNewFile();
OutputStream myOutput = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 存储数据库文件
*/
public void copyDataBaseToSdcard() {
try {
// InputStream myInput = mContext.getAssets().open("databases/" + mDATABASE_NAME);
String inputFileName = mDB_PATH + mDATABASE_NAME;
File inputFile = new File(inputFileName);
if(inputFile == null || !inputFile.exists()){
return;
}
InputStream myInput = new FileInputStream(inputFile);
File file = Sdcard.getSdcard("lyb" + mDATABASE_NAME , "");
if(file.exists()){
file.delete();
}
file.createNewFile();
OutputStream myOutput = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
如果是要拷贝其中的书籍到sd卡中的话
private void copyAssetBooksIntoSdcard() {
String[] locales;
AssetManager manager = this.getAssets();
final String path = "ekoudai" + File.separator + "collect";
try {
locales = manager.list("");
FileUtils fu = new FileUtils();
for (String s : locales) {
if (s.endsWith(".ekd")) {
InputStream is = manager.open(s);
fu.write2SDfromInput(path, s, is);
}
}
locales = null;
fu = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public File write2SDfromInput(String path,String fileName,final InputStream input)
{
File file = null;
OutputStream output = null;
int byteread = 0; // 读取的字节数
try {
creatSDDir(path);
file=creatSDFile(fileName, path);
output = new FileOutputStream(file);
byte buffer [] = new byte[1024*4];
while ((byteread = input.read(buffer)) != -1) {
output.write(buffer, 0, byteread);
}
output.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try{
input.close();
output.close();
}
catch(Exception e){
e.printStackTrace();
}
}
return file;
}
public File creatSDFile(String fileName, String dir) throws IOException
{
File file = new File(sd_path + dir + File.separator + fileName);
file.createNewFile();
return file;
}
/**
* 在SD卡上创建目录
*
* @param dirName
*/
public File creatSDDir(String dirName)
{
File dirFile = new File(sd_path + dirName);
dirFile.mkdirs();
//System.out.println("creatSDDir:"+dirFile.mkdirs());
return dirFile;
}
- android将raw或者assets中的文件复制到手机中
- 将assets文件夹中的文件复制到sd卡中
- Android程序函数 将assets文件夹下的文件复制到手机的sd卡中(包括子文件夹)
- Android程序函数 将assets文件夹下的文件复制到手机的sd卡中(包括子文件夹)
- 将assets文件中内容复制到SDCard中
- 将android工程中assets中的文本文件复制到指定的SD卡目录中
- 将android项目assets文件夹下的文件复制到SD卡中
- android 将Assets中的文件拷贝到sdcard上
- android 将Assets中的文件拷贝到sdcard上
- Android 将assets中的单个文件拷贝到sd卡中
- Android从assets和raw中读取txt文件
- Android从assets和raw中读取txt文件
- Android 从assets和raw中读取文件
- android开发将assets路径下的文件复制到特定路径
- 读取android项目中的文件(可以读取assets文件夹或在res文件夹中raw中的文件)
- 读取android项目中的文件(可以读取assets文件夹或在res文件夹中raw中的文件)
- Android 获取assets文件和raw文件
- C#将文件中的图片复制到另一个文件中
- 推荐系统资料
- Windows消息响应机制之五:MFC消息响应机制分析
- Android 开发中使用 SQLite 数据库
- hdu 3488 Tour【KM】同hdu 1853
- 在项目中如何使用外观模式
- android将raw或者assets中的文件复制到手机中
- wpf 控件顶层显示
- datatable的排序问题
- web应用程序中App_Code文件夹里的类书写代码没有智能提示
- 1040. Longest Symmetric String
- SpringMVC_使用
- 中国展示了世界最快的智能手机
- unity3d 动画卡帧 动画合成 动画层次
- 推荐引擎测试数据汇总