एक साधारण पाठ फ़ाइल पढ़ना


115

मैं अपने नमूना Android एप्लिकेशन में एक साधारण पाठ फ़ाइल पढ़ने की कोशिश कर रहा हूं। मैं सरल पाठ फ़ाइल को पढ़ने के लिए नीचे लिखे कोड का उपयोग कर रहा हूं।

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

मेरे प्रश्न हैं: मुझे "test.txt"अपनी परियोजना में यह फ़ाइल कहाँ रखनी चाहिए ? मैंने फ़ाइल को नीचे "res/raw"और "asset"फ़ोल्डर में डालने की कोशिश की है, लेकिन मुझे exception "FileNotFound"तब मिलता है जब ऊपर लिखे गए कोड का पहला लाइव निष्पादित हो जाता है।

सहायता के लिए धन्यवाद

जवाबों:


181

/assetsएंड्रॉइड प्रोजेक्ट के तहत अपनी टेक्स्ट फ़ाइल को डायरेक्टरी में रखें । AssetManagerइसे एक्सेस करने के लिए क्लास का इस्तेमाल करें ।

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

या आप फ़ाइल को /res/rawनिर्देशिका में भी रख सकते हैं , जहाँ फ़ाइल को अनुक्रमित किया जाएगा और R फ़ाइल में एक आईडी द्वारा पहुँचा जा सकता है:

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

9
इस दो तरीकों के बीच प्रदर्शन में अंतर के बारे में सोच रहा था और एक त्वरित बेंचमार्क ने कोई प्रशंसनीय अंतर नहीं दिखाया।
रूबेन एल।

बेंचमार्क परीक्षण के लिए उपयोग की जाने वाली पाठ फ़ाइल का आकार क्या है और क्या आपने छवियों और अन्य संसाधनों को अपने रिस फ़ोल्डर में रखा है जो वास्तविक समय (वाणिज्यिक / मुक्त) एंड्रॉइड ऐप के लिए अनुकरण करता है?
श्री राम

2
मेरे "हैलो वर्ल्ड" ऐप में "एसेट" फ़ोल्डर नहीं है। क्या मुझे हाथ से बनाना चाहिए?
कौशिक लेले

2
Btw, /assetsdir को मैन्युअल रूप से Android Studio 1.2.2 के रूप में जोड़ा जाना है। इसमें जाना चाहिए src/main
जपजी रजनीश

3
@ कौशिकेल जैसे लोगों के लिए, जो सोच रहे हैं कि वे संदर्भ कैसे प्राप्त कर सकते हैं; यह आसान है। एक गतिविधि में आप इसे "इस" कीवर्ड का उपयोग करके या "getCurrentContext ()" विधि से कॉल करके प्राप्त कर सकते हैं।
एलेक्स

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

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
यह फ़ाइल के एन्कोडिंग को निर्दिष्ट करने के लिए उपयोगी हो सकता है, उदाहरण के लिए "UTF-8" InputStreamReader कंस्ट्रक्टर में दूसरे पैरामीटर के रूप में।
मकाले

7

आपके assetsफ़ोल्डर में फ़ाइल होने के लिए आपको assetsफ़ोल्डर से फ़ाइलें प्राप्त करने के लिए इस कोड का उपयोग करना होगा :

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

इस उदाहरण में, getAssets()एक AssetManagerउदाहरण देता है और फिर आप AssetManagerएपीआई से जो भी विधि चाहते हैं उसका उपयोग करने के लिए स्वतंत्र हैं ।


5

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

संपत्ति फ़ोल्डर में सहेजी गई फ़ाइल को पढ़ने के लिए

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
"उपलब्ध है();" सुरक्षित नहीं है। AssetFileDescriptor fd = getAssets () का उपयोग करें। OpenFd (fileName); int size = (int) fd.getLength (); fd.close ();
GBY

0

यहाँ एक साधारण वर्ग है जो दोनों को संभालता है rawऔर assetफाइल करता है:

सार्वजनिक वर्ग 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 "";
    }
}

}

उदाहरण के लिए :

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

और संपत्ति फ़ाइलों के लिए:

ReadFromFile.asset(context, "file.txt");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.