2011-04-24 30 views
113

我想在我的示例Android应用程序中读取一个简单的文本文件。我正在使用下面的书面代码来阅读简单的文本文件。读取一个简单的文本文件

InputStream inputStream = openFileInput("test.txt"); 
InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

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

感谢您的帮助

回答

178

将在Android项目下的/assets目录中的文本文件。使用AssetManager类来访问它。

AssetManager am = context.getAssets(); 
InputStream is = am.open("test.txt"); 

或者你也可以把文件中的/res/raw目录,其中的文件将被编入索引,是在R文件的ID访问:

InputStream is = context.getResources().openRawResource(R.raw.test); 
+9

想知道关于这两种方法和快速基准之间的性能差异的文件没有显示出明显的差异。 – 2013-06-02 12:02:57

+0

用于基准测试的文本文件的大小是多少,您是否已将图像和其他资源放入您的res文件夹中,以模拟实时(商业/免费)android应用程序? – 2013-06-07 11:38:08

+0

不应**在try/finally块中关闭? – saiyancoder 2014-04-24 20:15:22

8

有一个文件在您assets文件夹您需要使用这段代码,以获得从assets文件夹中的文件:

yourContext.getAssets().open("test.txt"); 

在这个例子中,getAssets()返回AssetManager实例,然后您可以自由使用AssetManager API所需的任何方法。

26

试试这个,

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(); 
    } 
} 
6

在单对于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); } 
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(); 
} 

使用它,如下所示:

readFromAssets(context,"test.txt") 
+1

指定文件的编码可能很有用,例如在InputStreamReader构造函数中将“UTF-8”作为第二个参数。 – Makalele 2016-09-22 09:49:50

3

读取保存在文件夹中的资产

public static String readFromFile(Context context, String file) { 
     try { 
      InputStream is = context.getAssets().open(file); 
      int size = is.available(); 
      byte buffer[] = new byte[size]; 
      is.read(buffer); 
      is.close(); 
      return new String(buffer); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return "" ; 
     } 
    } 
+1

“is.available();”是不安全的。使用AssetFileDescriptor fd = getAssets()。openFd(fileName); int size =(int)fd.getLength(); fd.close(); – GBY 2017-12-01 10:48:20

相关问题