阅读一个简单的文本文件

Dal*_*ngh 115 android text-files java-io

我试图在我的示例Android应用程序中读取一个简单的文本文件.我使用下面编写的代码来读取简单的文本文件.

InputStream inputStream = openFileInput("test.txt");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
Run Code Online (Sandbox Code Playgroud)

我的问题是:我应该将这个"test.txt"文件放在我的项目中?我已经尝试将文件放在文件夹下"res/raw","asset"但我得到了exception "FileNotFound"上面写的代码第一次执行时的执行.

谢谢您的帮助

shi*_*eng 181

将您的文本文件放在/assetsAndroid项目下的目录中.使用AssetManager类来访问它.

AssetManager am = context.getAssets();
InputStream is = am.open("test.txt");
Run Code Online (Sandbox Code Playgroud)

或者您也可以将文件放在/res/raw目录中,文件将被编入索引,并且可以通过R文件中的ID访问:

InputStream is = context.getResources().openRawResource(R.raw.test);
Run Code Online (Sandbox Code Playgroud)

  • 想知道这两种方法之间的性能差异,快速基准显示没有明显的差异. (9认同)
  • 对于像@KaushikLele这样的人,他们想知道他们如何获得背景; 这很简单.在一个活动中,您可以通过使用"this"关键字或调用"getCurrentContext()"方法来获取它. (3认同)
  • 我的"hello world"应用程序中没有"asset"文件夹.我应该手动创建吗? (2认同)
  • 顺便说一句,`/ assets`目录必须从Android Studio 1.2.2开始手动添加.它应该在`src/main`中. (2认同)

小智 25

试试这个,

package example.txtRead;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class txtRead extends Activity {
    String labels="caption";
    String text="";
    String[] s;
    private Vector<String> wordss;
    int j=0;
    private StringTokenizer tokenizer;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        wordss = new Vector<String>();
        TextView helloTxt = (TextView)findViewById(R.id.hellotxt);
        helloTxt.setText(readTxt());
 }

    private String readTxt(){

     InputStream inputStream = getResources().openRawResource(R.raw.toc);
//     InputStream inputStream = getResources().openRawResource(R.raw.internals);
     System.out.println(inputStream);
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

     int i;
  try {
   i = inputStream.read();
   while (i != -1)
      {
       byteArrayOutputStream.write(i);
       i = inputStream.read();
      }
      inputStream.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

     return byteArrayOutputStream.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)


Asa*_*ssi 23

我是这样做的:

public static String readFromAssets(Context context, String filename) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(context.getAssets().open(filename)));

    // do reading, usually loop until end of file reading  
    StringBuilder sb = new StringBuilder();
    String mLine = reader.readLine();
    while (mLine != null) {
        sb.append(mLine); // process line
        mLine = reader.readLine();
    }
    reader.close();
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

readFromAssets(context,"test.txt")
Run Code Online (Sandbox Code Playgroud)


Wro*_*lai 7

在您的assets文件夹中有一个文件需要您使用这段代码才能从该assets文件夹中获取文件:

yourContext.getAssets().open("test.txt");
Run Code Online (Sandbox Code Playgroud)

在此示例中,getAssets()返回一个AssetManager实例,然后您可以自由地使用AssetManagerAPI中的任何方法.


小智 5

在Mono For Android ....

try
{
    System.IO.Stream StrIn = this.Assets.Open("MyMessage.txt");
    string Content = string.Empty;
    using (System.IO.StreamReader StrRead = new System.IO.StreamReader(StrIn))
    {
      try
      {
            Content = StrRead.ReadToEnd();
            StrRead.Close();
      }  
      catch (Exception ex) { csFunciones.MostarMsg(this, ex.Message); }
      }
          StrIn.Close();
          StrIn = null;
}
catch (Exception ex) { csFunciones.MostarMsg(this, ex.Message); }
Run Code Online (Sandbox Code Playgroud)