获取 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;
}
我正在开发一个 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;
}