ইনপুটস্ট্রিম থেকে কোনও ফাইল অবজেক্ট তৈরি করা কি সম্ভব?


121

একটি java.io.Fileথেকে একটি অবজেক্ট তৈরি করার কোনও উপায় আছে java.io.InputStream?

আমার প্রয়োজনীয়তাটি আরএআর থেকে ফাইলটি পড়া। আমি একটি অস্থায়ী ফাইল লেখার চেষ্টা করছি না, আমার কাছে আরআরআর্কাইভের ভিতরে একটি ফাইল রয়েছে যা আমি পড়ার চেষ্টা করছি।


1
আমার প্রয়োজনীয়তাটি আরএআর থেকে ফাইলটি পড়া। ধরুন আমি আরআর থেকে অস্থায়ী ফাইলটি লেখার চেষ্টা করছি না, আরআর-এর ভিতরে আমার একটি ফাইল রয়েছে, কেবল আমার পড়া দরকার।
অ্যান্ড্রয়েড গ্যালাক্সিম্যান

আমি প্রশ্নটি বুঝতে পারি না। পরিষ্কার করে বলো. আপনি যদি ইনপুট স্ট্রিম থেকে অরিনাল ফাইলটি চান তবে একটিটি নেই: আপনি কোনও ফাইল নয়, আরআর ফাইলটি পড়ছেন। আপনি যদি অন্য কিছু চান, কি?
মারকুইস

উত্তর:


87

আপনাকে নতুন ফাইল তৈরি করতে হবে এবং InputStreamসেই ফাইল থেকে সামগ্রীগুলি অনুলিপি করতে হবে:

File file = //...
try(OutputStream outputStream = new FileOutputStream(file)){
    IOUtils.copy(inputStream, outputStream);
} catch (FileNotFoundException e) {
    // handle exception here
} catch (IOException e) {
    // handle exception here
}

আমি IOUtils.copy()স্ট্রিমের ম্যানুয়াল অনুলিপি এড়াতে সুবিধাজনক ব্যবহার করছি । এছাড়াও এটি অন্তর্নির্মিত বাফারিং রয়েছে।


3
অ্যান্ড্রয়েড স্টুডিওতে আইইউটিসগুলি সমাধান করতে পারেনি এবং আপনার উল্লেখ করা লিঙ্কটি একটি 404
40

3
org.apache.directory.studio:org.apache.commons.io নির্ভরতা হিসাবে যুক্ত করা দরকার। আমার খারাপ। :)
শাহরায়েজ টি।

7
অনুগ্রহ করে আউটপুট স্ট্রিমটি সঠিকভাবে বন্ধ করুন, সংস্থানসমূহ বা আইউইটিএলস.ক্লুসিওয়েটি দিয়ে চেষ্টা করুন। আমি এর একটি উদাহরণ জানি তবে নতুনরা আক্ষরিকভাবে এটি অনুলিপি করবে।
রাফায়েল মেমব্রিজ


28

প্রথমে একটি টেম্প ফাইল তৈরি করুন।

File tempFile = File.createTempFile(prefix, suffix);
tempFile.deleteOnExit();
FileOutputStream out = new FileOutputStream(tempFile);
IOUtils.copy(in, out);
return tempFile;

দয়া করে আইইউটিসগুলির প্যাকেজের নাম অন্তর্ভুক্ত করুন
রিধু

org.apache.commons.io
শেহান

এটি অনুলিপি ফাংশনের তৃতীয় প্যারামিটার সহ org.apache.axis2.util এও বিদ্যমান। কার্যকারিতা সেখানেও কাজ করে। কোন ব্যবহার তুলনায় কোন তুলনা?
রিধুবর্তন

26

জাভা Since সাল থেকে, আপনি কোনও লাইনটিতে কোনও বাহ্যিক লাইব্রেরি ব্যবহার না করেও এটি করতে পারেন:

Files.copy(inputStream, outputPath, StandardCopyOption.REPLACE_EXISTING);

দেখুন এপিআই ডক্স


1
আপনি যদি অ্যান্ড্রয়েডের সাথে এটি ব্যবহার করেন তবে 26 মিনিটের ন্যূনতম এসডিকে প্রয়োজন।
নেফ

3

আপনি যদি অন্য গ্রন্থাগারটি ব্যবহার করতে না চান তবে রূপান্তর InputStreamকরার জন্য এখানে একটি সাধারণ ফাংশন OutputStream

public static void copyStream(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while ((read = in.read(buffer)) != -1) {
        out.write(buffer, 0, read);
    }
}

এখন আপনি সহজেই এই Inputstreamফাইলটি ব্যবহার করে একটি ফাইল লিখতে পারেন FileOutputStream-

FileOutputStream out = new FileOutputStream(outFile);
copyStream (inputStream, out);
out.close();

1

রিসোর্সেস ব্লক দিয়ে চেষ্টা করে সহজ জাভা ১১ টি সমাধান

public static void copyInputStreamToFile(InputStream input, File destination) {  

    try (OutputStream output = new FileOutputStream(destination)) {
        input.transferTo(output);
    } catch (IOException ioException) {
        ioException.printStackTrace();
    }

}

জাভা.ও.ইনপুট স্ট্রিম # ট্রান্সফারটো জাভা 9 এর পর থেকে উপলব্ধ।


0

আপনি যদি জাভা সংস্করণ 7 বা ততোধিক সংস্করণ ব্যবহার করছেন তবে আপনি যথাযথভাবে বন্ধ করতে চেষ্টা-সহ-সংস্থানগুলি ব্যবহার করতে পারেন FileOutputStreamকমন্স-আইওIOUtils.copy() থেকে নিম্নলিখিত কোড ব্যবহার ।

public void copyToFile(InputStream inputStream, File file) throws IOException {
    try(OutputStream outputStream = new FileOutputStream(file)) {
        IOUtils.copy(inputStream, outputStream);
    }
}  

আপনার আউটপুট স্ট্রিম বন্ধ করার দরকার নেই?
টমসজ

3
@ ট্রিনিটি 420 ব্লকটি প্রস্থান tryকরার সময় সূচনা অংশে নির্দিষ্ট হওয়া সংস্থানগুলি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায় try
এইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.