Membaca file teks sederhana


115

Saya mencoba membaca file teks sederhana dalam contoh Aplikasi Android saya. Saya menggunakan kode tertulis di bawah ini untuk membaca file teks sederhana.

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

Pertanyaan saya adalah: Di mana saya harus meletakkan "test.txt"file ini di proyek saya ?. Saya telah mencoba meletakkan file di bawah "res/raw"dan "asset"folder tetapi saya mendapatkan exception "FileNotFound"ketika pertama kali live kode yang tertulis di atas dieksekusi.

Terima kasih untuk bantuannya

Jawaban:


181

Tempatkan file teks Anda di /assetsdirektori di bawah proyek Android. Gunakan AssetManagerkelas untuk mengaksesnya.

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

Atau Anda juga bisa meletakkan file di /res/rawdirektori, di mana file tersebut akan diindeks dan dapat diakses oleh id di file R:

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

9
Ingin tahu tentang perbedaan kinerja antara kedua metode ini dan tolok ukur cepat tidak menunjukkan perbedaan yang berarti.
Reuben L.

Berapa ukuran file teks yang digunakan untuk pengujian benchmark dan apakah Anda meletakkan gambar dan sumber daya lain di folder res Anda yang disimulasikan ke aplikasi android real-time (komersial / gratis)?
Sree Rama

2
Saya tidak memiliki folder "aset" di aplikasi "hello world" saya. Haruskah saya membuat secara manual?
Kaushik Lele

2
Btw, /assetsdir harus ditambahkan secara manual pada Android Studio 1.2.2. Ini harus masuk src/main.
Jpaji Rajnish

3
Bagi mereka yang menyukai @KikLele, yang bertanya-tanya bagaimana mereka bisa mendapatkan konteks; mudah. Dalam sebuah aktivitas, Anda bisa mendapatkannya dengan menggunakan kata kunci "ini" atau memanggil metode "getCurrentContext ()".
Alex

25

coba ini,

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

23

Inilah cara saya melakukannya:

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

gunakan sebagai berikut:

readFromAssets(context,"test.txt")

1
Mungkin berguna untuk menentukan pengkodean file, misalnya "UTF-8" sebagai parameter kedua dalam konstruktor InputStreamReader.
Makalele

7

Memiliki file di assetsfolder Anda mengharuskan Anda menggunakan potongan kode ini untuk mendapatkan file dari assetsfolder:

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

Dalam contoh ini, getAssets()mengembalikan sebuah AssetManagerinstance dan kemudian Anda bebas menggunakan metode apa pun yang Anda inginkan dari AssetManagerAPI.


5

Di Mono Untuk 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); }

3

Untuk membaca file yang disimpan di folder aset

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
"tersedia();" tidak aman. Gunakan AssetFileDescriptor fd = getAssets (). OpenFd (fileName); int size = (int) fd.getLength (); fd.close ();
GBY

0

Berikut ini kelas sederhana yang menangani file rawdan asset:

public class ReadFromFile {

public static String raw(Context context, @RawRes int id) {
    InputStream is = context.getResources().openRawResource(id);
    int size = 0;
    try {
        size = is.available();
    } catch (IOException e) {
        e.printStackTrace();
        return "";
    }
    return readFile(size, is);
}

public static String asset(Context context, String fileName) {
    InputStream is = null;
    int size = 0;
    try {
        is = context.getAssets().open(fileName);
        AssetFileDescriptor fd = null;
        fd = context.getAssets().openFd(fileName);
        size = (int) fd.getLength();
        fd.close();
    } catch (IOException e) {
        e.printStackTrace();
        return "";
    }
    return readFile(size, is);
}


private static String readFile(int size, InputStream is) {
    try {
        byte buffer[] = new byte[size];
        is.read(buffer);
        is.close();
        return new String(buffer);
    } catch (Exception e) {
        e.printStackTrace();
        return "";
    }
}

}

Sebagai contoh :

ReadFromFile.raw(context, R.raw.textfile);

Dan untuk file aset:

ReadFromFile.asset(context, "file.txt");
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.