2013-07-16 44 views
1

尝试从资产目录加载文件以便将其用作配置文件。 AssetManager找不到它。 config.global和config.properties都位于项目的assets目录中。 config类是在setUp()函数中生成的,然后调用readConfig来开始。下面是在主文件中的代码:AssetManager无法在资产目录中找到文件

protected void setUp() throws Exception { 
    super.setUp(); 
    mLithium = (LithiumExtension) Trio.getInstance(new LithiumExtension(this)) 
      .getExtension(); 
    config = StorefrontConfig.getInstance(); 
    Resources resources = getActivity().getResources(); 
    AssetManager asM = resources.getAssets(); 
    InputStream in = asM.open("config.global"); 
    OutputStream out = asM.openFd("config.properties").createOutputStream(); 
    config.readConfig(in, out); 
    setTestSettings(); 
} 

而对于配置代码:

public class Config { 

private static Config instance; 
public Properties prop; 

static { 
    instance = new Config(); 
} 

private Config() { 
    prop = new Properties(); 
} 

public void readConfig(InputStream in, OutputStream out) { 

    try { 

     prop.load(in); 
     in.close(); 

     prop.store(out, "yay"); 
     out.close(); 
    } 
    catch (Exception e) { 
     System.out.println("Failed to create properties"); 
     System.exit(3); 
     Log.d("Config", "Failed to create properly initialized config class"); 
    } 
} 

public static Config getInstance() { 

    if(instance == null) 
     instance = new Config(); 
    return instance; 
} 

public String getProperty (String key) { 
    return prop.getProperty(key); 
} 
} 

在运行时,我得到了一个config.globaljava.io.FileNotFoundException。这是抛在代码的asM.open("config.global")行。一直困在这一点上。任何帮助,将不胜感激!

+0

您能得到什么,如果你登录as的内容M.list(“”)'?(http://developer.android.com/reference/android/content/res/AssetManager.html#list(java.lang.String))另外,你是否清理过你的项目,因为添加文件到资产? – Geobits

+0

我已经清理,刷新和重建整个项目。另外,出于某种原因,当我做Log.i时LogCat没有输出任何东西(asM.list(“”)[0],null) – user2433924

+1

它可能找不到合适的资产。尝试将活动上下文传递给Tarsem在下面的注释中建议的设置方法。 – Geobits

回答

2

接收上下文setUp(Context c),并使用这个获得资产

因此通过 尝试改变

AssetManager asM = resources.getAssets(); 

AssetManager asM = c.getAssets(); 
+0

所以,setUp()代码实际上是在一个Abstract类中,所以我不能直接调用getAssets()。 – user2433924

+0

@ user2433924查看更新的答案! –

+0

仍然无法找到文件 – user2433924

相关问题