Android 将文件复制到指定目录

这篇博客介绍了如何在Android应用中将文件,如数据库文件,从初始位置复制到指定的目录,例如/data/data/包名/databases下。通过示例展示了复制数据库文件Novel.db到应用程序数据库目录的过程,适用于复制各种文件类型。

         有时开发需要将指定的文件复制到指定的目录下,比如:第一次打开应用程序时,可以将其注册的一些相关信息或者一些有必要的数据信息复制到指定的目录下,永久的保存下来,今天我就仿照网上一篇相关博文写一个刚开始放在Androd工程里的一个数据库文件复制到Android应用程序中。大家修改一下存放目录,将图片、文本等文件复制到指定目录的sd里

说明一下,所有应用程序的数据库都是存放到 /data/data/包名/databases 下面

  

package com.txj.novel.read;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.annotation.SuppressLint;
import android.app.TabActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

/**
 * @functional 主界面
 * @author hugengzong
 * @createTime 2014年11月29日下午10:47:44
 */
@SuppressLint("HandlerLeak")
public class CopyOfMainActivity extends TabActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        mHandler.sendEmptyMessage(1); // 判断是否有数据库,如果没有将数据库写入指定位置
        
    }

    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {

            /**
             * 判断数据库是否有数据库,如果没有将数据库复制到指定位置,
             * Novel.db是assets下的数据库名称
             */
            case 1: 
                try {
                    toSDWriteFile("Novel.db");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                
                break;
            }
        }
    };

    // 将指定文件写入SD卡,说明一下,应用程序的数据库是存放到/data/data/包名/databases 下面
    private String toSDWriteFile(String fileName) throws IOException {
        // 获取assets下的数据库文件流
        InputStream is = this.getBaseContext().getAssets().open(fileName);

        // 获取应用包名
        String sPackage = this.getPackageName();

        File mSaveFile = new File("/data/data/" + sPackage + "/databases/");
    
        if (!mSaveFile.exists()) {
            mSaveFile.mkdirs();
        }
        String local_file = mSaveFile.getAbsolutePath() + "/" + fileName;

        mSaveFile = new File(local_file);

        if (mSaveFile.exists()) {
            mSaveFile.delete();
        }
        mSaveFile.createNewFile();

        FileOutputStream fos = new FileOutputStream(mSaveFile, true);

        byte[] buffer = new byte[400000];
        int count = 0;
        while ((count = is.read(buffer)) > 0) {
            fos.write(buffer, 0, count);
        }
        mSaveFile = null;
        fos.close();
        is.close();

        return local_file;
    }

}

     其中Novel.db是assets下的数据库名称,如果数据库名称不同,在此修改就行了。

     本文到此就结束了,各位兄台有不好之处,请不吝赐教!
 

评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值