একটি java.io.File
থেকে একটি অবজেক্ট তৈরি করার কোনও উপায় আছে java.io.InputStream
?
আমার প্রয়োজনীয়তাটি আরএআর থেকে ফাইলটি পড়া। আমি একটি অস্থায়ী ফাইল লেখার চেষ্টা করছি না, আমার কাছে আরআরআর্কাইভের ভিতরে একটি ফাইল রয়েছে যা আমি পড়ার চেষ্টা করছি।
একটি java.io.File
থেকে একটি অবজেক্ট তৈরি করার কোনও উপায় আছে java.io.InputStream
?
আমার প্রয়োজনীয়তাটি আরএআর থেকে ফাইলটি পড়া। আমি একটি অস্থায়ী ফাইল লেখার চেষ্টা করছি না, আমার কাছে আরআরআর্কাইভের ভিতরে একটি ফাইল রয়েছে যা আমি পড়ার চেষ্টা করছি।
উত্তর:
আপনাকে নতুন ফাইল তৈরি করতে হবে এবং 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()
স্ট্রিমের ম্যানুয়াল অনুলিপি এড়াতে সুবিধাজনক ব্যবহার করছি । এছাড়াও এটি অন্তর্নির্মিত বাফারিং রয়েছে।
এক লাইনে:
FileUtils.copyInputStreamToFile(inputStream, file);
(Org.apache.commons.io)
প্রথমে একটি টেম্প ফাইল তৈরি করুন।
File tempFile = File.createTempFile(prefix, suffix);
tempFile.deleteOnExit();
FileOutputStream out = new FileOutputStream(tempFile);
IOUtils.copy(in, out);
return tempFile;
জাভা Since সাল থেকে, আপনি কোনও লাইনটিতে কোনও বাহ্যিক লাইব্রেরি ব্যবহার না করেও এটি করতে পারেন:
Files.copy(inputStream, outputPath, StandardCopyOption.REPLACE_EXISTING);
দেখুন এপিআই ডক্স ।
আপনি যদি অন্য গ্রন্থাগারটি ব্যবহার করতে না চান তবে রূপান্তর 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();
public static void copyInputStreamToFile(InputStream input, File destination) {
try (OutputStream output = new FileOutputStream(destination)) {
input.transferTo(output);
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
জাভা.ও.ইনপুট স্ট্রিম # ট্রান্সফারটো জাভা 9 এর পর থেকে উপলব্ধ।
আপনি যদি জাভা সংস্করণ 7 বা ততোধিক সংস্করণ ব্যবহার করছেন তবে আপনি যথাযথভাবে বন্ধ করতে চেষ্টা-সহ-সংস্থানগুলি ব্যবহার করতে পারেন FileOutputStream
। কমন্স-আইওIOUtils.copy()
থেকে নিম্নলিখিত কোড ব্যবহার ।
public void copyToFile(InputStream inputStream, File file) throws IOException {
try(OutputStream outputStream = new FileOutputStream(file)) {
IOUtils.copy(inputStream, outputStream);
}
}
try
করার সময় সূচনা অংশে নির্দিষ্ট হওয়া সংস্থানগুলি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায় try
।