Android 将文件复制到指定目录

时间:2022-03-01 21:04:23

         有时开发需要将指定的文件复制到指定的目录下,比如:第一次打开应用程序时,可以将其注册的一些相关信息或者一些有必要的数据信息复制到指定的目录下,永久的保存下来,今天我就仿照网上一篇相关博文写一个刚开始放在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下的数据库名称,如果数据库名称不同,在此修改就行了。

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