在Android Studio中加载一个简单的文本文件

30

我正在使用谷歌的新 Android Studio IDE 开始一个全新的项目。

我试图使用 InputStreamReader 加载一个简单的文本文件,但却出现了文件未找到的异常。现在没有任何 assets/ 文件夹。我尝试在不同的位置创建它并添加我的文件(在项目的根目录、.java 文件的根目录等),也尝试将文件移动到其他地方,但仍然提示文件未找到。

在 Eclipse 中从来没有这样的问题,因为模板会自动创建一个 assets 文件夹。

有人知道应该把 assets 放在哪里或如何加载它们吗?

以下是使用的代码,它在 .open() 处失败:

InputStream iS = resources.getAssets().open("bla.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(iS));

我也在 Eclipse 中尝试了这段代码,它可以运行并加载文件内容。所以在 Android Studio 中可能需要一些步骤。


创建什么?StreamReader流吗? - Yohann T.
不,不是资产文件夹。 - Simon
右键单击项目->新建->目录,文件夹出现得很好,然后我将文本文件拖到其中。 - Yohann T.
@Simon,请在您的第一条评论中澄清您的第二句话。 - cja
1
@cja。当然。Studio有很多漏洞,使用起来可能会很困难。它尚未发布,并且没有获得构建Android应用程序的认证。帖子表明OP经验不是很丰富,因此我的建议是坚持使用经过验证和测试的已发布软件。 - Simon
显示剩余2条评论
4个回答

88
  1. 步骤1: 打开Name_Project-Name_Project.iml文件。
  2. 查看以下代码行: option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets"
  3. 步骤2: 在主文件夹中创建一个名为“assets”的子文件夹。
  4. 步骤3: 将文件放入此文件夹。
  5. 步骤4: 加载它。完成。

1
正确的答案。.iml文件中的路径条目是关键。谢谢。 - Yohann T.
1
非常好!我搜了一个多小时都没找到,所有基于Eclipse的想法都失败了。谢谢FIT226557! :) - Laurence Moroney
2
我的.iml文件中没有像第二步所说的那一行? - Gooey
10
不要打开主项目的.iml文件,而是打开主模块的.iml文件。例如,如果你的项目名为"MyProject",实际运行的是"app",那么请打开"MyProject/app/app.iml"文件。希望能有所帮助。 - KaHa6uc
@FIT226557 我按照答案所说的做了,但是当我运行活动时仍然找不到文件。出现了“文件不存在”的错误。还有其他建议吗? 在Ubuntu 12.04-Android Studio-64位上。 - Arhat Baid
显示剩余3条评论

4

对我来说,正确的答案并没有起作用。

这个可以:

前往项目视图,然后进入 app/src/main 并创建一个名为 assets 的新目录。

要加载文件:

   InputStream is = getApplicationContext().getAssets().open("bla.txt");

或者:

   InputStream is = context.getAssets().open("bla.txt");

然后您可以按照您想要的任何方式将其转换为字符串,例子在这里

详细视频介绍了如何操作(不是我的视频)


1
这段代码将对您有用。它将从文件中获取所有数据。
public class Quiz extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_quiz);
    try {
        PlayWithRawFiles();
    } catch (IOException e) {
        Toast.makeText(getApplicationContext(),
                "Problems: " + e.getMessage(), Toast.LENGTH_LONG).show();
    }
}// onCreate

public void PlayWithRawFiles() throws IOException {
    String str="";
    StringBuffer buf = new StringBuffer();
    InputStream is = this.getResources().openRawResource(R.raw.ashraf);
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    if (is!=null) {
        while ((str = reader.readLine()) != null) {
            buf.append(str + "\n" );
        }
    }
    is.close();
   TextView tv=(TextView)findViewById(R.id.tv1);
    tv.setText(buf.toString());


}//
        }

你需要在res目录下创建一个raw文件夹,并将你的文件添加到其中。 - Ashraf

0

//将互联网上所有可用的代码编译,这对于从文本文件中读取数据非常完美 //编译者:JimHanarose

 ArrayList<String> data_base = new ArrayList<String>();
    String text = "";
    try {
        InputStream is = getApplicationContext().getAssets().open("g.txt"); //save this .txt under src/main/assets/g.txt
        int size = is.available();
        StringBuffer buf = new StringBuffer();
        byte [] buffer = new byte[size];
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        if (is!=null) {
            while ((text = reader.readLine()) != null) {
                data_base.add(text.toString()); //create your own arraylist variable to hold each line being read from g.txt 
            }
        }
        is.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接