常用的路径写法
获取/system路径
Environment.getRootDirectory() ;
获取/cache路径
Environment.getDownloadCacheDirectory();
获取当前程序路径
context.getFilesDir().getAbsolutePath();
获取该程序的安装包路径
context.getPackageResourcePath();
获取程序默认数据库路径
context.getDatabasePath("city.db").getAbsolutePath();
内部存储路径:/data/data/youPackageName/,应用卸载时会被删除
"/data"+Environment.getDataDirectory().getAbsolutePath()+"youPackageName";
SD卡的跟路径
Environment.getExternalStorageDirectory().getAbsolutePath();
导入数据库
DBManager.java
public class DBManager { public static final String DB_NAME = "city.db"; public static final String PACKAGE = "com.android.test"; public static final String DB_PATH = "/data"+Environment.getDataDirectory().getAbsolutePath()+"/"+PACKAGE; private SQLiteDatabase database; private Context context; DBManager(Context context) { this.context = context; } public void openDatabase() { this.database = openDatabase(DB_PATH + "/" + DB_NAME); } private SQLiteDatabase openDatabase(String dbfile) { AssetManager assetManager = context.getAssets(); File file = new File(dbfile); SharePreferenceUtil mSpUtil = SharePreferenceUtil.getSharePreferenceUtil(context); int version = mSpUtil.getVersion(); try { //如果不存在或者第一次运行执行拷贝 if (!file.exists() || version < 1) { //有两种方式可以读取 //InputStream is = context.getResources().openRawResource(R.raw.city); InputStream is = assetManager.open(DB_NAME); FileOutputStream fos = new FileOutputStream(dbfile); byte[] buffer = new byte[1024]; int length = -1; while ((length = is.read(buffer)) > 0) { fos.write(buffer, 0, length); fos.flush(); } fos.close(); is.close(); mSpUtil.setVersion(1); } //打开database SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,null); return db; } catch (FileNotFoundException e) { Log.e("Database", "File not found"); e.printStackTrace(); } catch (IOException e) { Log.e("Database", "IO exception"); e.printStackTrace(); } return null; } public void closeDatabase() { this.database.close(); } }
SharePreferenceUtil.java
public class SharePreferenceUtil { private SharedPreferences sp; private SharedPreferences.Editor editor; private static SharePreferenceUtil mSpUtil; private static final String VERSION = "version"; public SharePreferenceUtil(Context context, String file) { sp = context.getSharedPreferences(file, Context.MODE_PRIVATE); editor = sp.edit(); } public static SharePreferenceUtil getSharePreferenceUtil(Context context) { if (mSpUtil == null) mSpUtil = new SharePreferenceUtil(context,"city"); return mSpUtil; } public int getVersion() { return sp.getInt(VERSION, -1); } public void setVersion(int version) { editor.putInt(VERSION, version); editor.commit(); } }
上面的例子是将现有的数据库city.db导入到内部存储路径/data/data/com.android.test/下,其中有两种获取city.db的方式;
1、city.db放在assets目录下,直接通过context.getAssets().open("city.db")获取;
2、city.db放在res下的raw文件夹中,通过context.getResources().openRawResource(R.raw.city)获取;
两者区别:assets下的文件不会被编译,也就是说在R文件中无法找到,而raw文件夹中的文件会被编译,在R文件中能找到,因此可以使用R.raw.city去获取;
一般情况下像配置文件、数据量比较小的数据库文件在导入时可以导入到内部存储路径,当程序被卸载的时候会跟着被删除,一些较大的文件或动态的文件,比如聊天数据一般情况下可导入SD卡路径下自己生成一个文件夹中;
如需转载请注明出处:http://blog.csdn.net/zapperbot
<p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>