将资源文件读取为string

我想阅读位于资产中的文件的内容作为string。 例如,位于src/main/assets/

原来的问题
我发现这个问题主要是作为阅读资产文件的“常见问题解答”,所以我总结了上面的问题。 以下是我原来的天真的问题

我试图读取一个资产文件作为string,我尝试了20个答案在这里,但他们不为我工作。

我的资产文件夹中有一个文件:data.opml,我必须把内容放在一个string中。 我发送它像:

  OPML.importFromFile(string, MainTabActivity.this); 

并接收它像:

  importFromFile(String filename, Context context); 

有些工作(但不是资产文件):

  OPML.importFromFile(new StringBuilder(Environment.getExternalStorageDirectory().toString()).append(File.separator).append(fileNames[which]).toString(),MainTabActivity.this); 

我试过了:

  AssetFileDescriptor descriptor = getAssets().openFd("data.opml"); FileReader reader = new FileReader(descriptor.getFileDescriptor()); And also: InputStream input = getAssets().open("data.opml"); Reader reader = new InputStreamReader(input, "UTF-8"); 

Maby我做错了,但它不会工作,因为它的项目给出了错误(分别为:OPML不能为参数filereader和读取器),如果有人知道如何做到这一点,将不胜感激!

getAssets().open()将返回一个InputStream 。 从标准的Java I / O读取:

  StringBuilder buf=new StringBuilder(); InputStream json=getAssets().open("book/contents.json"); BufferedReader in= new BufferedReader(new InputStreamReader(json, "UTF-8")); String str; while ((str=in.readLine()) != null) { buf.append(str); } in.close(); 

而且,在将来,请完整,准确地解释您的“不工作”是什么意思,因为这个解释不是很有帮助。

CommonsWare的代码有一个小错误 – 换行字符被丢弃,不会被添加到string中。 这里是一些固定的代码准备复制+粘贴:

 private String loadAssetTextAsString(Context context, String name) { BufferedReader in = null; try { StringBuilder buf = new StringBuilder(); InputStream is = context.getAssets().open(name); in = new BufferedReader(new InputStreamReader(is)); String str; boolean isFirst = true; while ( (str = in.readLine()) != null ) { if (isFirst) isFirst = false; else buf.append('\n'); buf.append(str); } return buf.toString(); } catch (IOException e) { Log.e(TAG, "Error opening asset " + name); } finally { if (in != null) { try { in.close(); } catch (IOException e) { Log.e(TAG, "Error closing asset " + name); } } } return null; } 

你也可以做,不用循环。 这很简单

 AssetManager assetManager = getAssets(); InputStream input; String text = ""; try { input = assetManager.open("test.txt"); int size = input.available(); byte[] buffer = new byte[size]; input.read(buffer); input.close(); // byte buffer into a string text = new String(buffer); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.v("TAG", "Text File: " + text);