获取 android 源包中的子文件夹名称和文件名称列表

Getting list of subfolders name and files name in android source package

我正在开发一个 android 应用程序来存储 sql 文件以更新 sqlite 数据库。当用户按下某个按钮时,sql 脚本将 运行。这是我放置 sql 文件

的地方

到目前为止,我一直在 运行 我的脚本中使用此解决方案: 首先,将我的更新映射到资源 update.xml

<resources>    

    <string name="update_list">
        v2_9_11
    </string>

    <string-array name="v2_9_11">
        <item>1_AlterTable_wapactivity</item>
    </string-array>

</resources>

并使用此方法在文件中获取 sql 脚本:

private void runScript(String version_name){
        try{
            String[] sql_list = mGap.getResources().getStringArray(getArrayIdentifier(mGap, version_name));
            for (String sql : sql_list) {
                InputStream in =  getClass().getResourceAsStream("/com/ods/scm/script/update/"+version_name+"/"+sql+".sql");
                Reader fr = new InputStreamReader(in, "utf-8");
                BufferedReader br = new BufferedReader(fr);
                String s="";
                String baris;
                while((baris=br.readLine())!=null){
                    s+=baris;
                 }
                mDbHelper.executeStatement(s);
            }
            insertUpdate(version_name);
        }
        catch(Exception e){
            System.out.println(e.getMessage());
        }
    }

我从 update.xml 中获取了字符串 version_name 和字符串[ ] sql_list 文件名。 问题是,我想获取 version_name (在这种情况下 v2_9_11 作为文件夹更新的子文件夹名称)和 sql 文件名(在这种情况下 1_AlterTable_wapactivity.sql )而不映射它在 update.xml。谁能帮帮我?

编辑
或者谁能​​指导我如何在构建应用程序时将其自动映射到 update.xml?

我建议您将 .sql 文件放在 assets 文件夹中。通过这样做,您可以自由地使用 File IO API.

操作您的文件

对不起大家,我刚刚把它放在赏金中,但我可以在我把它放在赏金后的短时间内自行解决它。无论如何,我的解决方案是将 android 设备 (data/app/....apk) 中的 apk 文件作为 zip 流打开。然后列出所有以com/ods/scm/script/update开头的文件。这是我获取所有以它开头的文件的方法:

public ArrayList openApk(String filePath){
  ArrayList<String> list = new ArrayList<String>();
  FileInputStream fis = null;
  ZipInputStream zipIs = null;
  ZipEntry zEntry = null;
  try {
      fis = new FileInputStream(filePath);
      zipIs = new ZipInputStream(new BufferedInputStream(fis));
      while((zEntry = zipIs.getNextEntry()) != null){
        if(zEntry.getName().startsWith("com/ods/scm/script/update/"))
          list.add(zEntry.getName());
      }
      zipIs.close();
  } catch (FileNotFoundException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  }
  return list;
}