2011-04-24 5 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

장소 안드로이드 프로젝트에서 /assets 디렉토리에있는 텍스트 파일에 대한

감사합니다. 액세스하려면 AssetManager 클래스를 사용하십시오.

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

또는 당신은 또한 파일 색인과 R 파일에서 ID로 접근 될 /res/raw 디렉토리에 파일을 넣을 수 있습니다 : 당신의 assets 폴더에 파일을 갖는

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

자산 폴더에 저장 한 파일을 보였다 읽을 수 없습니다. –

+0

벤치 마크 테스트에 사용되는 텍스트 파일의 크기는 얼마이며 실시간 (상업용/무료) 안드로이드 앱을 시뮬레이트하는 이미지 및 기타 리소스를 res 폴더에 넣었습니까? –

+0

**는 try/finally 블록에서 닫히지 않아야합니까? – saiyancoder

8

assets 폴더에서 파일을 얻기 위해이 코드 조각을 사용해야합니다 :이 예에서

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

getAssets() 반환하는 AssetManager 인스턴스를 사용하고 나서 AssetManager API에서 원하는 모든 방법을 자유롭게 사용할 수 있습니다. 다음과 같이

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

이 그것을 사용 :

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

는 ....

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

이것은 내가 그것을 어떻게

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

파일의 인코딩 (예 : "UTF-8")을 InputStreamReader 생성자의 두 번째 매개 변수로 지정하는 것이 유용 할 수 있습니다. – Makalele

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