অ্যান্ড্রয়েড পাঠ্য কাঁচা সংস্থান ফাইল পড়ুন


123

জিনিসগুলি সহজ তবে অনুমিত হিসাবে কাজ করে না।

আমার কাছে একটি কাঁচা সংস্থান হিসাবে একটি পাঠ্য ফাইল যুক্ত হয়েছে। পাঠ্য ফাইলটিতে পাঠ্য রয়েছে:

খ) যদি প্রয়োগযোগ্য আইনটি সফ্টওয়্যারটির প্রতি সম্মান জানিয়ে যে কোনও ওয়্যারেন্টি প্রয়োজন, সমস্ত সরবরাহের ওয়্যারেন্টি নাইনেটের সময়সীমার মধ্যে সীমাবদ্ধ থাকে (90) সরবরাহের তারিখ থেকে দিনগুলি।

(গ) ভার্চুয়াল ওরিয়েন্টিয়ারিং দ্বারা, তার ব্যবসায়ীরা, বিতরণকারী, এজেন্টস বা কর্মচারীদের দ্বারা কোনও মৌখিক বা লিখিত তথ্য বা পরামর্শ দেওয়া হয়নি, কোনও ওয়ারেন্টি বা কোনওভাবেই বাড়ানোর স্ক্রিপ বাড়াতে হবে না।

(ডি) (কেবল মার্কিন যুক্তরাষ্ট্রে) কিছু পরিসংখ্যান প্রয়োগিত ওয়্যারেন্টিগুলি ছাড়াই অনুমতি দেয় না, সুতরাং উপরোক্ত এক্সক্লুশন আপনাকে আবেদন করতে পারে না। এই ওয়্যারেন্টি আপনাকে নির্দিষ্ট আইনী অধিকার দেয় এবং আপনি রাজ্য থেকে পৃথক অন্যান্য আইনী অধিকারগুলিও রাখতে পারেন।

আমার পর্দায় আমার মতো লেআউট রয়েছে:

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
                     android:layout_width="fill_parent" 
                     android:layout_height="wrap_content" 
                     android:gravity="center" 
                     android:layout_weight="1.0"
                     android:layout_below="@+id/logoLayout"
                     android:background="@drawable/list_background"> 

            <ScrollView android:layout_width="fill_parent"
                        android:layout_height="fill_parent">

                    <TextView  android:id="@+id/txtRawResource" 
                               android:layout_width="fill_parent" 
                               android:layout_height="fill_parent"
                               android:padding="3dip"/>
            </ScrollView>  

    </LinearLayout>

কাঁচা সংস্থান পড়ার কোডটি হ'ল:

TextView txtRawResource= (TextView)findViewById(R.id.txtRawResource);

txtDisclaimer.setText(Utils.readRawTextFile(ctx, R.raw.rawtextsample);

public static String readRawTextFile(Context ctx, int resId)
{
    InputStream inputStream = ctx.getResources().openRawResource(resId);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    int i;
    try {
        i = inputStream.read();
        while (i != -1)
        {
            byteArrayOutputStream.write(i);
            i = inputStream.read();
        }
        inputStream.close();
    } catch (IOException e) {
        return null;
    }
    return byteArrayOutputStream.toString();
}

পাঠ্যটি দেখানো হয়েছে তবে প্রতিটি লাইনের পরে আমি একটি অদ্ভুত চরিত্র পেয়েছি [] কীভাবে আমি এই চরিত্রটি সরিয়ে ফেলতে পারি? আমি মনে করি এটি নিউ লাইন।

ওয়ার্কিং সলিউশন

public static String readRawTextFile(Context ctx, int resId)
{
    InputStream inputStream = ctx.getResources().openRawResource(resId);

    InputStreamReader inputreader = new InputStreamReader(inputStream);
    BufferedReader buffreader = new BufferedReader(inputreader);
    String line;
    StringBuilder text = new StringBuilder();

    try {
        while (( line = buffreader.readLine()) != null) {
            text.append(line);
            text.append('\n');
        }
    } catch (IOException e) {
        return null;
    }
    return text.toString();
}

3
ইঙ্গিত: আপনি আপনার কাঁচাআরএস প্যারামিটারটি @ রাউআরেস দিয়ে টিকিয়ে রাখতে পারেন যাতে অ্যান্ড্রয়েড স্টুডিওগুলি কাঁচা সম্পদকে বহন করে।
রোল

কার্যকরী সমাধানটি উত্তর হিসাবে পোস্ট করা উচিত, যেখানে এটি উত্সাহ দেওয়া যায় can
লার্শ

উত্তর:


65

আপনি যদি বাইট-ভিত্তিক ইনপুট স্ট্রিমের পরিবর্তে একটি অক্ষর-ভিত্তিক বাফারডারিডার ব্যবহার করেন?

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = reader.readLine();
while (line != null) { ... }

ভুলে যাবেন না যে readLine()নতুন লাইনগুলি এড়িয়ে যায়!


162

আপনি এটি ব্যবহার করতে পারেন:

    try {
        Resources res = getResources();
        InputStream in_s = res.openRawResource(R.raw.help);

        byte[] b = new byte[in_s.available()];
        in_s.read(b);
        txtHelp.setText(new String(b));
    } catch (Exception e) {
        // e.printStackTrace();
        txtHelp.setText("Error: can't show help.");
    }

5
আমি নিশ্চিত নই যে ইনপুটসট্রিম.এবলভ্যালটি () এখানে সঠিক পছন্দ, বরং বাইটআরআরআউটপুট স্ট্রিম থেকে এন == -1 পড়ুন।
থমাসআরএস

15
এটি বড় সংস্থানগুলির জন্য কাজ করতে পারে না। এটি ইনপুটস্ট্রিম রিড বাফারের আকারের উপর নির্ভর করে এবং কেবলমাত্র সংস্থানটির একটি অংশকে ফিরিয়ে দিতে পারে।
d4n3

6
@ d4n3 ঠিক আছে, ইনপুট স্ট্রিম উপলভ্য পদ্ধতির ডকুমেন্টেশনটিতে বলা হয়েছে: "আরও ইনপুটটির জন্য ব্লক না করে পড়া বা এড়ানো যায় এমন আনুমানিক সংখ্যক বাইট দেয় Return নোট করুন যে এই পদ্ধতিটি এমন একটি দুর্বল গ্যারান্টি সরবরাহ করে যে এটি খুব কার্যকর নয় অনুশীলন "
ওজবা

ইনপুট স্ট্রিম.ভলভ্যতার জন্য অ্যান্ড্রয়েড ডক্স দেখুন। আমি যদি এটি সঠিকভাবে পাই তবে তারা বলে যে এটি এই উদ্দেশ্যে ব্যবহার করা উচিত নয়। কে ভেবেছিল যে বোকা ফাইলটির বিষয়বস্তু পড়া
এতটা কঠিন

2
এবং আপনার সাধারণ ব্যতিক্রম ধরা উচিত নয়। পরিবর্তে আইওএক্সেপশন ধরুন।
অ্যালসান

30

আপনি যদি অ্যাপাচি "কমন্স-আইও" থেকে আইওটিএলগুলি ব্যবহার করেন তবে এটি আরও সহজ:

InputStream is = getResources().openRawResource(R.raw.yourNewTextFile);
String s = IOUtils.toString(is);
IOUtils.closeQuietly(is); // don't forget to close your streams

নির্ভরতা: http://mvnrepository.com/artifact/commons-io/commons-io

ম্যাভেন:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

Gradle:

'commons-io:commons-io:2.4'

1
আইওউটিস ব্যবহার করতে আমার কী আমদানি করা উচিত?
8:58

1
অ্যাপাচি কমন্স-আইও গ্রন্থাগার ( Commons.apache.org/proper/commons-io )। অথবা আপনি যদি মাভেন ব্যবহার করেন ( mvnrepository.com/artifact/commons-io/commons-io )।
tbraun

8
গ্রেডের জন্য: "কমন্স-আইও: কমন্স-আইও: 2.1" সংকলন করুন
জাস্টিনমরিস

9
তবে সাধারণত, 3 টি আরও লাইন কোড লেখা এড়াতে বাহ্যিক তৃতীয় পক্ষের libs আমদানি করা .. ওভারকিলের মতো মনে হয়।
milosmns

12

কোটলিনের সাথে আপনি কোডের এক লাইনে এটি করতে পারেন:

resources.openRawResource(R.raw.rawtextsample).bufferedReader().use { it.readText() }

বা এমনকি এক্সটেনশন ফাংশন ঘোষণা করুন:

fun Resources.getRawTextFile(@RawRes id: Int) =
        openRawResource(id).bufferedReader().use { it.readText() }

এবং তারপরে সরাসরি এটি ব্যবহার করুন:

val txtFile = resources.getRawTextFile(R.raw.rawtextsample)

তুমি একটি পরী.
রবার্ট লিবারাতোর

এটিই আমার জন্য কাজ করেছিল! ধন্যবাদ!
fuomag9

নিস! আপনি আমার দিন তৈরি!
সিজার্ড

3

বরং এটি এইভাবে করুন:

// reads resources regardless of their size
public byte[] getResource(int id, Context context) throws IOException {
    Resources resources = context.getResources();
    InputStream is = resources.openRawResource(id);

    ByteArrayOutputStream bout = new ByteArrayOutputStream();

    byte[] readBuffer = new byte[4 * 1024];

    try {
        int read;
        do {
            read = is.read(readBuffer, 0, readBuffer.length);
            if(read == -1) {
                break;
            }
            bout.write(readBuffer, 0, read);
        } while(true);

        return bout.toByteArray();
    } finally {
        is.close();
    }
}

    // reads a string resource
public String getStringResource(int id, Charset encoding) throws IOException {
    return new String(getResource(id, getContext()), encoding);
}

    // reads an UTF-8 string resource
public String getStringResource(int id) throws IOException {
    return new String(getResource(id, getContext()), Charset.forName("UTF-8"));
}

একটি ক্রিয়াকলাপ থেকে , যুক্ত করুন

public byte[] getResource(int id) throws IOException {
        return getResource(id, this);
}

বা একটি পরীক্ষার কেস থেকে যোগ করুন

public byte[] getResource(int id) throws IOException {
        return getResource(id, getContext());
}

এবং আপনার ত্রুটি পরিচালনা পরিচালনা দেখুন - যখন আপনার সংস্থানগুলি উপস্থিত থাকতে হবে বা কিছু (খুব?) ভুল আছে তখন ব্যতিক্রমগুলি ধরুন এবং উপেক্ষা করবেন না।


আপনার দ্বারা খোলার স্ট্রিমটি বন্ধ করা দরকার openRawResource()?
অ্যালেক্স Semeniuk

আমি জানি না, তবে তা অবশ্যই মানক। আপডেট করার উদাহরণ।
টমাসআরএস

2

এটি অন্য একটি পদ্ধতি যা অবশ্যই কাজ করবে, তবে আমি একক ক্রিয়াকলাপে একাধিক পাঠ্যদর্শনগুলিতে দেখতে একাধিক পাঠ্য ফাইলগুলি পড়তে পারি না, যে কেউ সহায়তা করতে পারে?

TextView helloTxt = (TextView)findViewById(R.id.yourTextView);
    helloTxt.setText(readTxt());
}

private String readTxt(){

 InputStream inputStream = getResources().openRawResource(R.raw.yourTextFile);
 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();
}

2

@Borislemke আপনি একইভাবে এটি করতে পারেন

TextView  tv ;
findViewById(R.id.idOfTextView);
tv.setText(readNewTxt());
private String readNewTxt(){
InputStream inputStream = getResources().openRawResource(R.raw.yourNewTextFile);
 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();
 }

2

এখানে সপ্তাহের এবং ভিভোড্রয়েডের সমাধানগুলির মিশ্রণ রয়েছে।

এটি ভোভোড্রয়েডের দ্রবণগুলির চেয়ে বেশি সঠিক এবং সপ্তাহের সমাধানের চেয়ে আরও সম্পূর্ণ।

    try {
        InputStream inputStream = res.openRawResource(resId);
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            try {
                StringBuilder result = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }
                return result.toString();
            } finally {
                reader.close();
            }
        } finally {
            inputStream.close();
        }
    } catch (IOException e) {
        // process exception
    }

2

কাঁচা ফোল্ডার থেকে পাঠ্য ফাইলটি পড়ার জন্য এখানে একটি সহজ পদ্ধতি :

public static String readTextFile(Context context,@RawRes int id){
    InputStream inputStream = context.getResources().openRawResource(id);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    byte buffer[] = new byte[1024];
    int size;
    try {
        while ((size = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, size);
        }
        outputStream.close();
        inputStream.close();
    } catch (IOException e) {

    }
    return outputStream.toString();
}

2

এখানে কোটলিনে একটি বাস্তবায়ন

    try {
        val inputStream: InputStream = this.getResources().openRawResource(R.raw.**)
        val inputStreamReader = InputStreamReader(inputStream)
        val sb = StringBuilder()
        var line: String?
        val br = BufferedReader(inputStreamReader)
        line = br.readLine()
        while (line != null) {
            sb.append(line)
            line = br.readLine()
        }
        br.close()

        var content : String = sb.toString()
        Log.d(TAG, content)
    } catch (e:Exception){
        Log.d(TAG, e.toString())
    }

1

1. প্রথমটি একটি ডিরেক্টরি ফোল্ডার তৈরি করুন এবং এটির পুনরায় ফোল্ডারের ভিতরে কাঁচা নাম লিখুন 2 আপনি পূর্বে তৈরি কাঁচা ডিরেক্টরি ফোল্ডারের ভিতরে একটি .txt ফাইল তৈরি করুন এবং এটির কোনও নাম দিন যেমন। আপনি "টেক্সট .txt" তৈরি করা .txt ফাইলের ভিতরে যে পাঠ্যটি চান তা 4. আপনার মেইন.এক্সএমএল মেইনএকটিভিটি.জভাতে একটি পাঠ্যদর্শন অন্তর্ভুক্ত করতে ভুলবেন না

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gettingtoknowthe_os);

    TextView helloTxt = (TextView)findViewById(R.id.gettingtoknowos);
    helloTxt.setText(readTxt());

    ActionBar actionBar = getSupportActionBar();
    actionBar.hide();//to exclude the ActionBar
}

private String readTxt() {

    //getting the .txt file
    InputStream inputStream = getResources().openRawResource(R.raw.articles);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    try {
        int i = inputStream.read();
        while (i != -1) {
            byteArrayOutputStream.write(i);
            i = inputStream.read();
        }
        inputStream.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
    return byteArrayOutputStream.toString();
}

আশা করি এটি কাজ করেছে!


1
InputStream is=getResources().openRawResource(R.raw.name);
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
StringBuffer data=new StringBuffer();
String line=reader.readLine();
while(line!=null)
{
data.append(line+"\n");
}
tvDetails.seTtext(data.toString());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.