package com.example.mountaintravel.kind;


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

import android.content.Context;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;

/**
 * 这个类就是实现从assets目录读取数据库文件然后写入SDcard/db中,如果在SDcard/db/gts.db中存在，就打开数据库，
 * 不存在就从assets目录下复制过去
 * 
 * @author
 * 
 */
public class SQLdm {
	private String filePath = getSDPath() + "/gts.db";
	private String pathStr = getSDPath() + "/";

	public SQLdm() {
		super();
		deleteFile();
	}
	// 数据库存储路径
	// 数据库存放的文件夹 data/data/com.main.jh 下面
	public SQLiteDatabase openDatabase(Context context) {
		File jhPath = new File(filePath);

		if (jhPath.exists()) {// 查看数据库文件是否存在
			// Log.i("test", "存在数据库");
			return SQLiteDatabase.openOrCreateDatabase(jhPath, null);// 存在则直接返回打开的数据库
		} else {// 不存在先创建文件夹
			File path = new File(pathStr);
			/*
			 * Log.i("test", "pathStr=" + path); if (path.mkdir()) {
			 * Log.i("test", "创建成功"); } else { Log.i("test", "创建失败"); }
			 */
			try {
				AssetManager am = context.getAssets();// 得到资源
				InputStream is = am.open("gts.db"); // 得到数据库的输入流
				// Log.i("test", is + "");
				FileOutputStream fos = new FileOutputStream(jhPath);// 用输出流写到SDcard上面
				// Log.i("test", "fos=" + fos);
				// Log.i("test", "jhPath=" + jhPath);
				byte[] buffer = new byte[1024];// 创建byte数组 用于1KB写一次
				int count = 0;
				while ((count = is.read(buffer)) > 0) {
					// Log.i("test", "得到");
					fos.write(buffer, 0, count);
				}
				// 最后关闭就可以了
				fos.flush();
				fos.close();
				is.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
			// 如果没有这个数据库 我们已经把他写到SD卡上了，然后在执行一次这个方法 就可以返回数据库了
			return openDatabase(context);
		}
	}

	public String getSDPath() {
		File sdDir = null;
		boolean sdCardExist = Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
		if (sdCardExist) {
			sdDir = Environment.getExternalStorageDirectory();// 获取跟目录
		}
		return sdDir.toString();
	}
	
	 //将SD卡文件删除
    public  void  deleteFile(){
    	File jhPath = new File(filePath);
         if (jhPath.exists()){
             if (jhPath.isFile()){
        	    jhPath.delete();
             }
           jhPath.delete();
        }
    }
}
