开发技巧
遍历系统目录
遍历系统文件目录,可以查找到我们需要的文件,方便记录文件的目录地址(不想找database在系统中的位置,就写了这么个玩意儿,一定要开启一个线程,不然手机文件多,可能会崩溃)
优点是:无论手机中有什么文件,都能够便利出来。缺点是手机文件越大,遍历需要的时间久越长久。
示例代码如下:
1 private void printFileList(int level,String fileName){ 2 level++; 3 File file = new File(fileName); 4 if(file.isDirectory()){//判断是否是文件夹 5 if(file.listFiles()!=null){ 6 for (File temp:file.listFiles()){ 7 printFileList(level,temp.getAbsolutePath()); 8 } 9 } 10 11 }else{//是文件直接打印当前目录 12 StringBuilder sb = new StringBuilder(); 13 for (int i = 1;i<level;i++){ 14 sb.append("-"); 15 } 16 System.out.println(sb.toString()+fileName); 17 } 18 19 }
调用代码如下:
printFileList(0,"/");
读取已经存在的数据库文件
在开发应用的时候,为了省事儿,客户端的筒子们可能会得到一个完整的db文件,而不是json串。比如手机号查询系统,点餐系统,医疗系统,都会将服务端生成的db文件直接打包,客户端调用接口的时候返回这个db文件进行操作,这样可以保证本地机器未联网的情况下也可以进行正常的操作。
示例代码如下:
(文件只加载了一次,如果db文件需要更新,请缩小if的范围)
1 /** 2 * 获取数据库路径,将assets目录中的文件加载到dababase目录下面。同样我们可以直接读取网络下载是数据,然后直接将数据流存放到本地demo.db文件中 3 * @param context 4 * @return 5 */ 6 private String getDataBasePath(Context context) { 7 String dbName = "demo.db"; 8 String dbDir = mContext.getDatabasePath(dbName).getAbsolutePath().replaceAll(dbName,"");//没有文件名 9 String dbPath = mContext.getDatabasePath(dbName).getAbsolutePath();//有文件名 10 File pathFile = new File(dbPath); 11 File dirFile = new File(dbDir); 12 if (!pathFile.exists()) {//检查一下 database 目录是否存在 13 try { 14 if (!dirFile.exists()) {//database目录不存在,新建 15 dirFile.mkdir(); 16 } 17 if(!pathFile.exists()){//文件不存在就直接创建新的文件 18 pathFile.createNewFile(); 19 } 20 // 得到 assets 目录下我们实现准备好的 SQLite 数据库作为输入流 21 InputStream is = context.getAssets().open(dbName); 22 // 输出流 23 OutputStream os = new FileOutputStream(dbPath); 24 // 文件写入 25 byte[] buffer = new byte[1024]; 26 int length; 27 while ((length = is.read(buffer)) > 0) { 28 os.write(buffer, 0, length);//写入到/data/data/packagename/databases/demo.db目录下 29 } 30 // 关闭文件流 31 os.flush(); 32 os.close(); 33 is.close(); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 } 37 } 38 39 return dbPath; 40 }