0

私はそれがすることはrootフォルダをスキャンすることであるアプリを構築しています

資産

次に、内部にフォルダがあるかどうかを検索します...これの目的は、すべてのテキストファイルルートをデータベースに保存することです。データベースには、テキストファイル名とルートが含まれます。

これはコードの一部です:

private void seedData(int indent, File file) throws IOException {
        if (file.isDirectory()) {
          File[] files = file.listFiles();
          for (int i = 0; i < files.length; i++)
            {
              seedData(indent + 4, files[i]);
              path+=files[i].getPath();
            }

        }
        else{
            db.execSQL("insert into "+TABLE+" (title, url) values ('"+
                    file.getName().substring(0, file.getName().length()-4)+"', '"+file.getPath()+"');");
        }

      }

しかし、通常のJavaでは、ルートを使用してファイルを作成し、それを次のようなメソッドに送信します。seedData(1, new File("/root"));つまり、私の質問は、Androidでこれを行うにはどうすればよいですか。または、より正確に言うと、コードによって「スキャン」されるようにroot、にあるフォルダーを指すファイルを作成するにはどうすればよいですか。assets私はすでに試しseedData(1, new File("/assets/root")); ましたが、うまくいきませんでした。どんな助けでも大歓迎です。

注:いいえ、これらすべてのサブフォルダーに3kを超えるテキストファイルがあるため、パスを手動で保存することはできません。

4

1 に答える 1

0

ここでの問題は、アセットがファイルではないことです。上記の方法に相当するAndroidは、次のようになります。

private void seedData(int indent, String path, AssetManager mgr)
    throws IOException
{
    String[] list = mgr.list(path);
    if (list.length > 0) {
        // path is a directory with something in it
        for (String item : list) {
            seedData(indent + 4, path + "/" + item, mgr);
        }
    } else {
        // path is either an empty directory or a file
        // unfortunately, Android makes it hard to distinguish
        String name = path.substring(path.lastIndexOf('/') + 1);
        db.execSQL("insert into "+TABLE+" (title, url) values ('"
                +name.substring(0, name.length()-4)+"', '"
                +path+"');");
    }
}

あなたはあなたの活動からこれを呼び出すでしょう

seedData(0, "root", getAssets());

参考までに、「ルート」フォルダ内のアセットのURI形式はですfile:///android_asset/root/...

于 2012-01-03T02:06:39.200 に答える