读取文本文件方法

时间:2011-06-18 08:44:18

标签: java android file text

我是一个Android newby所以道歉,如果这看似微不足道,而且冗长的帖子。我用google搜索等,但我能找到的唯一的android引用似乎是指

InputStream is = getAssets().open("read_asset.txt");
        int size = is.available();

        // Read the entire asset into a local byte buffer.
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();

我尝试在我的课程中使用它,但即使在导入java.io.InputStream之后;它在getAssets()上出错了。

我正在尝试使用listview的rowId点击; 打开一个文本文件(取决于rowId值), 逐行读取文件, 生成前16个字符的字符串数组等 然后使用数组填充下一个活动的列表视图。

String[] sectID = null; //to be loaded in listview
    switch (rowId){
        case 0://custom, go to section input screen
        case 1:                 
     readSectionFile s = new readSectionFile("Sect_US.dat");
     sectID=s.arrayShapesAll();

我的readSectionFile类(提取)是;

public readSectionFile(String FileName) {
  //Count the number of section records in the data file
  String line = null;    // String that holds current file line
  int recordcount = 0;   // Line number of count
  try{
      BufferedReader buf = new BufferedReader(new FileReader(FileName));
      // Read file to count records
      while ((line = buf.readLine()) != null){    //null = EOF
          line = buf.readLine();
          if (line.substring(0, 1).equals("*") || line.length() == 0) {      //== comment or blank line
              //do nothing
          }else{
              recordcount++;
          }
      }//while
      buf.close();
  }catch (IOException x){
       x.printStackTrace();
  }//end try
  // Now read file to load array
  mSectionIDArray = new String[recordcount + 1];
  mSectionIdx = new int[recordcount + 1][2];
  mData = new double[recordcount + 1][15];
  int c=0;
  String sectdata = null;    // String that holds current file line
  try {
      BufferedReader buf = new BufferedReader(new FileReader(FileName));
      while ((sectdata = buf.readLine()) != null){           //null = EOF
          sectdata = buf.readLine();

代码不起作用并在readSectionFile s = new readSectionFile(“Sect_US.dat”);

崩溃

另外,在readSectionFile代码中,buf的第二个实例生成一个Eclipse错误,要求try,catch块,而第一个实例被接受。

我的问题是, 我打算正确打开这个文本文件(在/ assets中)吗? 第二次使用buf有什么问题?

2 个答案:

答案 0 :(得分:1)

getAssets()是Activity中的一个方法。如果您尝试从另一个类调用getAssets(),请将活动的上下文传递给要调用该方法的类,然后调用context.getAssets()。

答案 1 :(得分:0)

您写道:

  

我打算正确打开这个文本文件(在/ assets中)吗?

一种选择是将文本文件放在raw下名为res的目录中,并使用String将其读入openRawResource(...)

假设您在my_text_file目录中有一个名为raw的文本文件,

String myText = readTextFileFromResource(context, R.raw.my_text_file);

,其中

private String readTextFileFromResource(Context context, int resourceId){
    StringBuilder fileContents = new StringBuilder();
    try{
        InputStream inputStream = context.getResources().openRawResource(resourceId);
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String nextLine;
        while((nextLine = bufferedReader.readLine()) != null){
            fileContents.append(nextLine);
            fileContents.append('\n');
        }
    }catch(IOException e){
        //handle
    }catch(Resources.NotFoundException nfe){
        //handle
    }
    return fileContents.toString();
}