সম্পদ থেকে ফাইল পড়ুন


177
public class Utils {
    public static List<Message> getMessages() {
        //File file = new File("file:///android_asset/helloworld.txt");
        AssetManager assetManager = getAssets();
        InputStream ims = assetManager.open("helloworld.txt");    
     }
}

আমি এই কোডটি সম্পদ থেকে কোনও ফাইল পড়ার চেষ্টা করছি। আমি এটি করার জন্য দুটি উপায় চেষ্টা করেছি। প্রথমত, কখন Fileআমি ব্যবহার করেছি FileNotFoundException, যখন ব্যবহার করার AssetManager getAssets()পদ্ধতিটি স্বীকৃত নয়। এখানে কি কোন সমাধান আছে?

উত্তর:


225

আপনার প্রয়োজনগুলি মেলাতে আমি বাফার রিডিং প্রসারিত / সংশোধন করার জন্য একটি ক্রিয়াকলাপে যা করি তা এখানে

BufferedReader reader = null;
try {
    reader = new BufferedReader(
        new InputStreamReader(getAssets().open("filename.txt")));

    // do reading, usually loop until end of file reading  
    String mLine;
    while ((mLine = reader.readLine()) != null) {
       //process line
       ...
    }
} catch (IOException e) {
    //log the exception
} finally {
    if (reader != null) {
         try {
             reader.close();
         } catch (IOException e) {
             //log the exception
         }
    }
}

সম্পাদনা: আপনার উত্তরটি যদি কোনও ক্রিয়াকলাপের বাইরে এটি কীভাবে করা যায় তবে আমার উত্তর সম্ভবত অকেজো। যদি আপনার প্রশ্নটি কীভাবে সম্পদ থেকে কোনও ফাইল পড়তে হয় তবে উত্তরটি উপরে।

আপডেট :

টাইপ নির্দিষ্ট করে একটি ফাইল খোলার জন্য নিম্নলিখিত হিসাবে ইনপুটস্ট্রিম রিডার কলটিতে টাইপ যুক্ত করুন।

BufferedReader reader = null;
try {
    reader = new BufferedReader(
        new InputStreamReader(getAssets().open("filename.txt"), "UTF-8")); 

    // do reading, usually loop until end of file reading 
    String mLine;
    while ((mLine = reader.readLine()) != null) {
       //process line
       ...
    }
} catch (IOException e) {
    //log the exception
} finally {
    if (reader != null) {
         try {
             reader.close();
         } catch (IOException e) {
             //log the exception
         }
    }
}

সম্পাদনা

@ স্ট্যান মন্তব্যে যেমন বলেছেন, আমি যে কোডটি দিচ্ছি তাতে লাইনগুলি সংক্ষিপ্ত করা হচ্ছে না। mLineপ্রতি পাস প্রতিস্থাপন করা হয়। এজন্যই আমি লিখেছি //process line। আমি ধরে নিই যে ফাইলে কিছু প্রকারের ডেটা রয়েছে (যেমন একটি পরিচিতি তালিকা) এবং প্রতিটি লাইন আলাদাভাবে প্রক্রিয়া করা উচিত।

আপনি যদি কোনও প্রকার প্রক্রিয়াজাতকরণ ছাড়াই কেবল ফাইলটি লোড করতে চান তবে আপনাকে mLineপ্রতিটি পাস ব্যবহার করে StringBuilder()এবং প্রতিটি পাস সংযোজন করতে হবে।

অন্য সম্পাদনা

@ ভিনসেন্টের মন্তব্য অনুসারে আমি finallyব্লকটি যুক্ত করেছি।

এছাড়াও লক্ষ করুন যে জাভা 7 এবং উচ্চতর ক্ষেত্রে আপনি সাম্প্রতিক জাভার বৈশিষ্ট্যগুলি এবং বৈশিষ্ট্যগুলি ব্যবহার try-with-resourcesকরতে পারেন ।AutoCloseableCloseable

প্রেক্ষাপট

যে একটি মন্তব্য @LunarWatcher পয়েন্টে getAssets()একটি হল classমধ্যে context। সুতরাং, আপনি যদি এটির বাইরে কল করেন তবে আপনাকে এটি activityউল্লেখ করতে হবে এবং প্রসঙ্গের দৃষ্টান্তটি ক্রিয়াকলাপে প্রেরণ করা দরকার।

ContextInstance.getAssets();

এটি @ মানেশের উত্তরে ব্যাখ্যা করা হয়েছে। সুতরাং যদি এটি আপনার পক্ষে কার্যকর হয় তবে তার উত্তরটিকে উঁচু করে তোলা কারণ তিনিই সেই বিষয়টিকে নির্দেশ করেছেন।


2
@ স্ট্যান, তারপরে মন্তব্যে সে সম্পর্কে লিখুন এবং লেখকরা এটি আপডেট করতে চান কিনা তা সিদ্ধান্ত নিতে দিন। সম্পাদনাগুলি স্পষ্টতার উন্নতির জন্য, অর্থ পরিবর্তনের জন্য নয়। কোড পুনর্বিবেচনা সর্বদা মন্তব্য হিসাবে পোস্ট করা উচিত।
কাইলমিট

2
আপনার কোডটি সময়মত স্ট্রিমটি বন্ধ করতে এবং সংস্থানটি মুক্ত করার গ্যারান্টি দেয় না। আমি আপনাকে ব্যবহার করার পরামর্শ দিচ্ছি finally {reader.close();}
ভিনসেন্ট ক্যান্টিন

2
আমি মনে করি এটি উপস্থাপন করা দরকারী যে উপরের কোডটি ADT- তে একটি ত্রুটি দেখায় - "রিডারক্লস ();" লাইনটি অন্য একটি চেষ্টা-ধরার ব্লকে রাখা দরকার। : এই থ্রেড পরীক্ষা stackoverflow.com/questions/8981589/... :)
JakeP

1
getAssets প্রসঙ্গে একটি শ্রেণি, তাই বাইরে ব্যবহারের ক্রিয়াকলাপের জন্য প্রসঙ্গে কল করা দরকার। কোনও ক্রিয়াকলাপের বাইরে, এটি এমন কিছু হবেcontext.getAssets(.....)
জো

1
আপনার আপডেট অনুসারে (বিটিডব্লিউ যোগ করার জন্য ধন্যবাদ), স্ট্যাটিক ক্ষেত্রে প্রসঙ্গ থাকা একটি মেমরি ফুটো। এটি সতর্কতার সাথে ব্যবহার করা উচিত এবং সঠিকভাবে পরিষ্কার করা উচিত। অন্যথায় আপনি মেমরি ফুটো দিয়ে শেষ করেন যা অ্যাপটিতে দুর্দান্ত প্রভাব ফেলতে পারে।
জো

65
getAssets()

এটির জন্য আপনাকে যে কোনও ক্লাসে ব্যবহার করতে হবে কেবল কার্যকলাপে কাজ Contextকরে।

ইউটিস ক্লাস পাসের ক্রিয়াকলাপের রেফারেন্স ( কুরুচিপূর্ণ উপায়) বা এটিকে প্যারামিটার হিসাবে প্রয়োগের প্রসঙ্গে একটি কনস্ট্রাক্টর তৈরি করুন । আপনার ইউটিস ক্লাসে getAsset () ব্যবহার করুন।


1
এটি কনটেক্সটের একটি সাবক্লাস এমন কোনও কিছুতে কাজ করে, যার মধ্যে ক্রিয়াকলাপ অনেকের মধ্যে একটি।
জেরেমি লোগান

শুধু লিখেছি আমি লিখেছি Context
ব্যবহারকারী370305

@ user370305 আপনি কি জানেন, কীভাবে আমি ইনপুট স্ট্রিমটিকে ফাইলআইপুট স্ট্রিমে রূপান্তর করতে পারি?
হটহিড

@ user370305 এই উপায়টি কীভাবে খারাপ?
সেবাদাস্তন সাবন্যুক

ফলাফলগুলি বিবেচনা না করে প্রায় ইউআই অবজেক্টগুলি পাস করা সাধারণত একটি খারাপ অভ্যাস। আপনি যদি সতর্ক না হন তবে আপনি মেমরি ফাঁস বা মৃত প্রসঙ্গ ব্যবহারের চেষ্টা করতে পারেন।
বিষয়টিতে

49

কখনও না থেকে ভাল।

আমার কিছু পরিস্থিতিতে লাইনে লাইনে ফাইল পড়তে সমস্যা হয়েছে। নীচের পদ্ধতিটি আমি এখনও অবধি খুঁজে পেয়েছি এবং আমি এটির প্রস্তাব দিই।

ব্যবহার: String yourData = LoadData("YourDataFile.txt");

কোথায় YourDataFile.txt রক্ষিত অধিকৃত হয় সম্পদ /

 public String LoadData(String inFile) {
        String tContents = "";

    try {
        InputStream stream = getAssets().open(inFile);

        int size = stream.available();
        byte[] buffer = new byte[size];
        stream.read(buffer);
        stream.close();
        tContents = new String(buffer);
    } catch (IOException e) {
        // Handle exceptions here
    }

    return tContents;

 }


এখানেও একই, পুনঃঅ্যাসেটম্যান্জার $ অ্যাসেটআইপুট স্ট্রিম @ .... কোনও বিশেষ কারণ কেন এটি ফিরে আসছে?
বিগস

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

1
বাফারে আকার বরাদ্দ করার সঠিক উপায় stream.available()
কাসিম রাঙ্গওয়ালা

39
public String ReadFromfile(String fileName, Context context) {
    StringBuilder returnString = new StringBuilder();
    InputStream fIn = null;
    InputStreamReader isr = null;
    BufferedReader input = null;
    try {
        fIn = context.getResources().getAssets()
                .open(fileName, Context.MODE_WORLD_READABLE);
        isr = new InputStreamReader(fIn);
        input = new BufferedReader(isr);
        String line = "";
        while ((line = input.readLine()) != null) {
            returnString.append(line);
        }
    } catch (Exception e) {
        e.getMessage();
    } finally {
        try {
            if (isr != null)
                isr.close();
            if (fIn != null)
                fIn.close();
            if (input != null)
                input.close();
        } catch (Exception e2) {
            e2.getMessage();
        }
    }
    return returnString.toString();
}

আপনি যদি মনে করেন যে আপনি যদি বাফার্ডারিডারটি বন্ধ করেন তবে এর চেয়ে এটি স্বয়ংক্রিয়ভাবে ইনপুটস্ট্রিয়ান রিডার এবং ইনপুটস্ট্রিমটি বন্ধ করতে হবে। কারণ এটি যা আপনি তাদের জন্য একটি হ্যান্ডেল তৈরি করেন না, যেমন input = new BufferedReader(new InputStreamReader(fIn));
ট্রান্স

3
আমি শেষে আপনার সমস্ত সংস্থান বন্ধ করার জন্য পৃথক চেষ্টা / ক্যাচ ব্লক তৈরি করার পরামর্শ দেব; এগুলি সবগুলিকে একত্রে ছুঁড়ে ফেলার পরিবর্তে - অন্য সংস্থান বন্ধ করার পূর্ব প্রচেষ্টা যদি ব্যতিক্রম ছুঁড়ে দেয় তবে এটি অন্য সংস্থানগুলি বন্ধ করে দিতে পারে।
রিস করুন

9
AssetManager assetManager = getAssets();
InputStream inputStream = null;
try {
    inputStream = assetManager.open("helloworld.txt");
}
catch (IOException e){
    Log.e("message: ",e.getMessage());
}

8

কোটলিনের জন্য একটি লাইন সমাধান:

fun readFileText(fileName: String): String {
    return assets.open(fileName).bufferedReader().use { it.readText() }
}

7

getAssets() আপনি ক্রিয়াকলাপ শ্রেণীর ভিতরে কল করার সময় পদ্ধতিটি কাজ করবে।

আপনি যদি এই পদ্ধতিটিকে অ-কার্যকলাপের ক্লাসে কল করেন তবে আপনাকে ক্রিয়াকলাপ শ্রেণি থেকে পাস করা কনটেক্সট থেকে এই পদ্ধতিটি কল করতে হবে। সুতরাং পদ্ধতিটি অ্যাক্সেস করতে পারেন এমন লাইনটি নীচে।

ContextInstance.getAssets();

ContextInstance ক্রিয়াকলাপ শ্রেণীর এই হিসাবে পাস হতে পারে।


5

ফাইল পড়া এবং লেখাই সর্বদা ভার্জোজ এবং ত্রুটি-ঝুঁকির মধ্যে রয়েছে। এই উত্তরগুলি এড়িয়ে চলুন এবং এর পরিবর্তে কেবল ওকিও ব্যবহার করুন:

public void readLines(File file) throws IOException {
  try (BufferedSource source = Okio.buffer(Okio.source(file))) {
    for (String line; (line = source.readUtf8Line()) != null; ) {
      if (line.contains("square")) {
        System.out.println(line);
      }
    }
  }
}

1
আপনি কেন জানেন যে এটি আরও নান্দনিক এবং সংক্ষিপ্ত দেখাচ্ছে? ওয়েল, কারণ আপনি বাদ দিয়েছেন, কমপক্ষে, এখানে অর্ধেক কোড। নির্ধারিত অংশ: 1) IOException'চেষ্টা করুন / ব্লক ব্লক 2) ব্যতিক্রম ক্ষেত্রে স্ট্রিমস বন্ধ করে দেওয়া হয় 3) এই কোডটি একটি একক লাইন পড়ে, পুরো ফাইলটি নয়। পারফরম্যান্স অনুসারে, এই গ্রন্থাগারটি অবশ্যই একটি ধরণের, এটিতে কোনও সন্দেহ নেই। এখন, আমাকে বলুন যে আমি এখনও "এই উত্তরগুলি" এড়ানো উচিত এবং কেবল ফাইলগুলি পড়ার জন্য ওকিও প্রয়োগ করব? উত্তরটি হ'ল না, যদি না এটি ইতিমধ্যে আপনার অ্যাপের অংশ হয়।
ফরিদ

আমার উত্তর আপডেট।
সায়েত

4

সম্পদে কোনও ফাইল পড়ার জন্য এখানে একটি পদ্ধতি:

/**
 * Reads the text of an asset. Should not be run on the UI thread.
 * 
 * @param mgr
 *            The {@link AssetManager} obtained via {@link Context#getAssets()}
 * @param path
 *            The path to the asset.
 * @return The plain text of the asset
 */
public static String readAsset(AssetManager mgr, String path) {
    String contents = "";
    InputStream is = null;
    BufferedReader reader = null;
    try {
        is = mgr.open(path);
        reader = new BufferedReader(new InputStreamReader(is));
        contents = reader.readLine();
        String line = null;
        while ((line = reader.readLine()) != null) {
            contents += '\n' + line;
        }
    } catch (final Exception e) {
        e.printStackTrace();
    } finally {
        if (is != null) {
            try {
                is.close();
            } catch (IOException ignored) {
            }
        }
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException ignored) {
            }
        }
    }
    return contents;
}

এটি একটি ভাল উত্তর, তবে স্ট্রিং কনক্যাটেনশন ব্যবহার করা খারাপ পদ্ধতির। পরিবর্তে স্ট্রিংবিল্ডার ব্যবহার বিবেচনা করুন। স্ট্রিংবিল্ডার সামগ্রীবিল্ডার = নতুন স্ট্রিংবিল্ডার (); যখন ((লাইন = রিডার.ড্রেডলাইন ())! = নাল) {builder.append ("\ n")। append (লাইন); ; এবং শেষে আপনি এটির মাধ্যমে নতুন স্ট্রিং অবজেক্ট তৈরি করতে পারেন: বিষয়বস্তু = কন্টেন্টবিল্ডার.টোস্ট্রিং ();
বার্তেরিও

4

আপনি ফাইলটি থেকে সামগ্রীটি লোড করতে পারেন। সম্পদ ফোল্ডারে উপস্থিত ফাইলটি বিবেচনা করুন।

public static InputStream loadInputStreamFromAssetFile(Context context, String fileName){
    AssetManager am = context.getAssets();
    try {
        InputStream is = am.open(fileName);
        return is;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

public static String loadContentFromFile(Context context, String path){
    String content = null;
    try {
        InputStream is = loadInputStreamFromAssetFile(context, path);
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        content = new String(buffer, "UTF-8");
    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }
    return content;
}

এখন আপনি ফাংশনটিকে নিম্নলিখিত হিসাবে কল করে সামগ্রীটি পেতে পারেন

String json= FileUtil.loadContentFromFile(context, "data.json");

ডেটা বিবেচনা করে.জসন অ্যাপ্লিকেশন অ্যাপ্লিকেশন \ এসআরসি \ প্রধান \ সম্পদ \ ডেটা.জসনে সংরক্ষিত আছে


3

মেইনএ্যাকটিভিটি.জভাতে

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        AssetsReader assetsReader = new AssetsReader(this);
        if(assetsReader.getTxtFile(your_file_title)) != null)
        {
            tvView.setText(assetsReader.getTxtFile(your_file_title)));
        }
    }

এছাড়াও, আপনি পৃথক শ্রেণি তৈরি করতে পারেন যা সমস্ত কাজ করে

public class AssetsReader implements Readable{

    private static final String TAG = "AssetsReader";


    private AssetManager mAssetManager;
    private Activity mActivity;

    public AssetsReader(Activity activity) {
        this.mActivity = activity;
        mAssetManager = mActivity.getAssets();
    }

    @Override
    public String getTxtFile(String fileName)
    {
        BufferedReader reader = null;
        InputStream inputStream = null;
        StringBuilder builder = new StringBuilder();

        try{
            inputStream = mAssetManager.open(fileName);
            reader = new BufferedReader(new InputStreamReader(inputStream));

            String line;

            while((line = reader.readLine()) != null)
            {
                Log.i(TAG, line);
                builder.append(line);
                builder.append("\n");
            }
        } catch (IOException ioe){
            ioe.printStackTrace();
        } finally {

            if(inputStream != null)
            {
                try {
                    inputStream.close();
                } catch (IOException ioe){
                    ioe.printStackTrace();
                }
            }

            if(reader != null)
            {
                try {
                    reader.close();
                } catch (IOException ioe)
                {
                    ioe.printStackTrace();
                }
            }
        }
        Log.i(TAG, "builder.toString(): " + builder.toString());
        return builder.toString();
    }
}

আমার মতে একটি ইন্টারফেস তৈরি করা ভাল, তবে এটি প্রয়োজনীয় নয়

public interface Readable {
    /**
     * Reads txt file from assets
     * @param fileName
     * @return string
     */
    String getTxtFile(String fileName);
}

2

আপনি যদি কার্যকলাপ ব্যতীত অন্য কোনও শ্রেণি ব্যবহার করেন তবে আপনি পছন্দ করতে পারেন,

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( YourApplication.getInstance().getAssets().open("text.txt"), "UTF-8"));

2

কোটলিন ব্যবহার করে, আপনি অ্যান্ড্রয়েডে সম্পদ থেকে কোনও ফাইল পড়তে নিম্নলিখিতটি করতে পারেন:

try {
    val inputStream:InputStream = assets.open("helloworld.txt")
    val inputString = inputStream.bufferedReader().use{it.readText()}
    Log.d(TAG,inputString)
} catch (e:Exception){
    Log.d(TAG, e.toString())
}

2

এটি খুব দেরি হয়ে গেছে তবে অন্যের জন্য যারা পীচি উত্তরগুলি সন্ধান করে:

public static String loadAssetFile(Context context, String fileName) {
    try {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(context.getAssets().open(fileName)));
        StringBuilder out= new StringBuilder();
        String eachline = bufferedReader.readLine();
        while (eachline != null) {
            out.append(eachline);
            eachline = bufferedReader.readLine();
        }
        return out.toString();
    } catch (IOException e) {
        Log.e("Load Asset File",e.toString());
    }
    return null;
}

1

cityfile.txt

   public void getCityStateFromLocal() {
        AssetManager am = getAssets();
        InputStream inputStream = null;
        try {
            inputStream = am.open("city_state.txt");
        } catch (IOException e) {
            e.printStackTrace();
        }
        ObjectMapper mapper = new ObjectMapper();
        Map<String, String[]> map = new HashMap<String, String[]>();
        try {
            map = mapper.readValue(getStringFromInputStream(inputStream), new TypeReference<Map<String, String[]>>() {
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
        ConstantValues.arrayListStateName.clear();
        ConstantValues.arrayListCityByState.clear();
        if (map.size() > 0)
        {
            for (Map.Entry<String, String[]> e : map.entrySet()) {
                CityByState cityByState = new CityByState();
                String key = e.getKey();
                String[] value = e.getValue();
                ArrayList<String> s = new ArrayList<String>(Arrays.asList(value));
                ConstantValues.arrayListStateName.add(key);
                s.add(0,"Select City");
                cityByState.addValue(s);
                ConstantValues.arrayListCityByState.add(cityByState);
            }
        }
        ConstantValues.arrayListStateName.add(0,"Select States");
    }
 // Convert InputStream to String
    public String getStringFromInputStream(InputStream is) {
        BufferedReader br = null;
        StringBuilder sb = new StringBuilder();
        String line;
        try {
            br = new BufferedReader(new InputStreamReader(is));
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return sb + "";

    }

লিঙ্কটি এখন ফিরে আসেFile no longer available That file has now been permanently removed and cannot be recovered
গ্রেগন

1

স্ক্যানার শ্রেণি এটি সহজ করতে পারে।

        StringBuilder sb=new StringBuilder();
        Scanner scanner=null;
        try {
            scanner=new Scanner(getAssets().open("text.txt"));
            while(scanner.hasNextLine()){
                sb.append(scanner.nextLine());
                sb.append('\n');
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(scanner!=null){try{scanner.close();}catch (Exception e){}}
        }
        mTextView.setText(sb.toString());

আপনি এই 2 লাইন sb.append (স্ক্যানার.নেক্সটলাইন ()) মার্জ করতে পারেন; sb.append ( '\ N'); to sb.appendln (স্ক্যানার.নেক্সটলাইন ());
মোজতাবা

0

@ এইচপিটাইম উত্তর কোটলিন সংস্করণ:

private fun getDataFromAssets(): String? {

    var bufferedReader: BufferedReader? = null
    var data: String? = null

    try {
        bufferedReader = BufferedReader(
            InputStreamReader(
                activity?.assets?.open("Your_FILE.html"),     
                "UTF-8"
            )
        )                  //use assets? directly if in activity

       var mLine:String = bufferedReader?.readLine()
        while (mLine != null) {
            data+= mLine
            mLine=bufferedReader.readLine()
        }

    } catch (e: Exception) {
        e.printStackTrace()
    } finally {
        try {
            bufferedReader?.close()
        } catch (e: Exception) {
           e.printStackTrace()
        }
    }
    return data
}

বর্তমানে এটি স্ট্রিংয়ের শূন্যপদটিকে প্রিপেন্ড করবে। প্রয়োজনীয় পরিবর্তন: var mLine:Stringহওয়া উচিত var mLine:String? var data: String?হওয়া উচিত var data = ""রিটার্ন টাইপ হওয়া উচিতString
fupduck

0

এখানে , বা , ছাড়া ফোল্ডারে কোনও InputStreamফাইল পাওয়ার জন্য এখানে একটি উপায় । কীভাবে আপনি সেই থেকে ডেটা পাবেনassetsContextActivityFragmentApplicationInputStream । এখানে অন্যান্য উত্তরে এর জন্য প্রচুর পরামর্শ রয়েছে।

Kotlin

val inputStream = ClassLoader::class.java.classLoader?.getResourceAsStream("assets/your_file.ext")

জাভা

InputStream inputStream = ClassLoader.class.getClassLoader().getResourceAsStream("assets/your_file.ext");

কোনও কাস্টম ClassLoaderখেলতে থাকলে সমস্ত বেট বন্ধ রয়েছে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.