简体   繁体   English

如何访问我的Android应用中的资产文件夹?

[英]How to access assets folder in my android app?

I'm writing at a little project for a friend. 我正在为一个朋友写一个小项目。 A notecard application. 记录卡应用程序。 My plan is to put the notecards in an xml format so i can import and export them easily. 我的计划是将记录卡以xml格式放置,以便我可以轻松导入和导出记录卡。 I located the xml files at the assets/xml/mynotecard.xml folder but i just can't manage to get access to this file. 我在assets / xml / mynotecard.xml文件夹中找到了xml文件,但是我无法管理对这个文件的访问。

Whenever i try to interpret the xml file (will be put to it's on class later) i get the exception with: test.xml is not a file. 每当我尝试解释xml文件时(稍后将放在类中),我都会得到以下异常:test.xml不是文件。 This is an extract of my code: 这是我的代码的一部分:

public class NotecardProActivity extends Activity { 公共类NotecardProActivity扩展了Activity {

List<String> xmlFiles;
public ArrayList<File> xmlFileList;
XMLInterpreter horst;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

   final AssetManager mgr = getAssets();


    displayFiles(mgr, "",0); 
     xmlFiles = displayFiles(mgr, "xml",0); 
     for (int e = 0; e<=xmlFiles.size()-1;e++)
     {
        Log.v("Inhalt List"+e+": ", xmlFiles.get(e));
     }     

    xmlFileList = new ArrayList<File>();
    for (int i = 0; i<=xmlFiles.size()-1;i++)
    {

        xmlFileList.add(new File("./assets/xml/"+xmlFiles.get(i)));
    }
    for (int i = 0; i<=xmlFileList.size()-1;i++)
    {
        Log.v("Name: ", xmlFileList.get(i).getName());
        Log.v("Filelocation: ",xmlFileList.get(i).getPath());
        Log.v("Filelocation: ",xmlFileList.get(i).getAbsolutePath());               
    }
    Log.v("DEBUG","XML FILE LISTE erfolgreich geschrieben!");

    //Alternative zum ausgelagerten XML INTERPRETER
    try
    {
    if(xmlFileList.get(0) == null){
        Log.v("Debug", "XMLFILE IS NULL");
    }
    else{
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(xmlFileList.get(0));
    doc.getDocumentElement().normalize();

    Log.v("Root element :", doc.getDocumentElement().getNodeName());
    NodeList nList = doc.getElementsByTagName("notecard");


    for (int temp = 0; temp < nList.getLength(); temp++) {

           Node nNode = nList.item(temp);
           if (nNode.getNodeType() == Node.ELEMENT_NODE) {

              Element eElement = (Element) nNode;    
              Log.v("GesetzesText: " , getTagValue("legal_text", eElement));
             // System.out.println("Kommentar : " + getTagValue("comment", eElement));                   
           }
        }
    }
    }
    catch (Exception e) {
        e.printStackTrace();
      }

    mgr.close();                
}


private List<String> displayFiles (AssetManager mgr, String path, int level) {
    List<String> abc = new ArrayList<String>();
    Log.v("Hello","enter displayFiles("+path+")");
   try {
       String list[] = mgr.list(path);
       abc.addAll(Arrays.asList(list));
        Log.v("Hello1","L"+level+": list:"+ Arrays.asList(list));

   } catch (IOException e) {
       Log.v("Fail","List error: can't list" + path);
   }
return abc;

} }

private String getTagValue(String sTag, Element eElement) {
    NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

    Node nValue = (Node) nlList.item(0);

    return nValue.getNodeValue();
}

} }

Would be really awesome if you guys could help me :) 如果你们能帮助我,那将真的很棒

Zip your xml folder (xml.zip for example) and put it in assets. 压缩您的xml文件夹(例如xml.zip)并将其放入资产中。 Getting assets with AssetsManager is very slow. 使用AssetsManager获取资产非常缓慢。 Also, doing so you can maintain your directory structure and just copy it to sdcard and extract it there. 此外,这样做还可以维护目录结构,只需将其复制到sdcard并将其提取到那里即可。 This will be a lot faster than getting each file in the directory. 这比获取目录中的每个文件要快得多。 You can use this post for the unzipping: How to unzip files programmatically in Android? 您可以使用此文章进行解压缩: 如何在Android中以编程方式解压缩文件? . Hope this helps. 希望这可以帮助。

Assets should be in the root of the folder... cannot put file in a sub folder. 资产应位于文件夹的根目录中...无法将文件放在子文件夹中。 assets\\file.suf would work while assets\\sub\\file.suf would not asset \\ file.suf将起作用,而assets \\ sub \\ file.suf将不起作用

android.resource://packagename/assets/filename

you can use the above line to refer to a file in assets folder. 您可以使用上面的行来引用资产文件夹中的文件。 Just replace the package name and file name. 只需替换软件包名称和文件名即可。

Note file name must not contain extensions 注释文件名不得包含扩展名

Updated:: 更新::

private List<String> getFiles(){
 AssetManager assetManager = getAssets();
    List<String> files = null;
    try {
        files = assetManager.list("");
    } catch (IOException e) {
        Log.e("tag", e.getMessage());
    }
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM