আমি কীভাবে একটি ফাইল তৈরি করব এবং জাভাতে এটি লিখব?


উত্তর:


1735

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

নোট করুন যে নীচের কোডগুলির প্রতিটি নমুনা যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে সেগুলি ওভাররাইট করে

একটি পাঠ্য ফাইল তৈরি করা হচ্ছে:

PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();

একটি বাইনারি ফাইল তৈরি করা হচ্ছে:

byte data[] = ...
FileOutputStream out = new FileOutputStream("the-file-name");
out.write(data);
out.close();

জাভা 7+ ব্যবহারকারীরা Filesফাইলগুলিতে লেখার জন্য ক্লাসটি ব্যবহার করতে পারেন :

একটি পাঠ্য ফাইল তৈরি করা হচ্ছে:

List<String> lines = Arrays.asList("The first line", "The second line");
Path file = Paths.get("the-file-name.txt");
Files.write(file, lines, StandardCharsets.UTF_8);
//Files.write(file, lines, StandardCharsets.UTF_8, StandardOpenOption.APPEND);

একটি বাইনারি ফাইল তৈরি করা হচ্ছে:

byte data[] = ...
Path file = Paths.get("the-file-name");
Files.write(file, data);
//Files.write(file, data, StandardOpenOption.APPEND);

58
ফাইল
প্রাইভেট

34
প্রিন্ট রাইটারটি ব্যবহার করা যেতে পারে (এবং প্রায়শই ব্যবহৃত হয়) তবে এটি কাজের জন্য সঠিক ধারণা নয় (ধারণাগতভাবে)। দস্তাবেজগুলি থেকে: "PrintWriter prints formatted representations of objects to a text-output stream. "বোজহোর উত্তর আরও সঠিক, যদিও এটি বোঝা জটিল দেখাচ্ছে (আপনি সর্বদা এটি কোনও কোনও ইউটিলিটি পদ্ধতিতে মোড়তে পারেন)।
21:40 '

14
সুতরাং অ্যাপটি তৈরির পরে আর কোনও পিসিতে ব্যবহার করার পরে পাঠ্য ফাইলটি তৈরি হবে কোথায় যেহেতু আমরা পথটি দিইনি?
মার্লন অ্যাবাইকুন

13
@ মারলনএবেইকুন ভাল প্রশ্ন। উত্তরটি হ'ল এটি কার্যকারী ডিরেক্টরিতে পাঠ্য ফাইলটি তৈরি করবে । ওয়ার্কিং ডিরেক্টরি হ'ল আপনি যে ডিরেক্টরি থেকে আপনার প্রোগ্রামটি চালান। উদাহরণস্বরূপ, আপনি যদি কমান্ড লাইন থেকে আপনার প্রোগ্রামটি সম্পাদন করেন, তবে সেই ডিরেক্টরিটি সেই মুহুর্তে আপনি যে "ডিরেক্টরিতে" থাকবেন তা হবে (লিনাক্সে, বর্তমান ওয়ার্কিং ডিরেক্টরিটি দেখতে "pwd" টাইপ করুন)। অথবা, আমি যদি এটি চালানোর জন্য আমার ডেস্কটপে কোনও জার ফাইলটি ডাবল-ক্লিক করি, তবে কার্যক্ষম ডিরেক্টরিটি ডেস্কটপ হবে।
মাইকেল 12

8
writer.close()একটি অবশেষে অবরুদ্ধ হওয়া উচিত
থিয়েরি

416

জাভা 7 এবং তত উপরে:

try (Writer writer = new BufferedWriter(new OutputStreamWriter(
              new FileOutputStream("filename.txt"), "utf-8"))) {
   writer.write("something");
}

এর জন্য দরকারী উপযোগিতা রয়েছে যদিও:

আপনি একটি ব্যবহার করতে পারেন FileWriterতবে এটি নোট করুন , তবে এটি ডিফল্ট এনকোডিংটি ব্যবহার করে যা প্রায়শই খারাপ ধারণা - স্পষ্টভাবে এনকোডিং নির্দিষ্ট করা ভাল।

নীচে জাভা 7 উত্তর এর মূল, নীচে দেওয়া আছে


Writer writer = null;

try {
    writer = new BufferedWriter(new OutputStreamWriter(
          new FileOutputStream("filename.txt"), "utf-8"));
    writer.write("Something");
} catch (IOException ex) {
    // Report
} finally {
   try {writer.close();} catch (Exception ex) {/*ignore*/}
}

আরও দেখুন: পড়া, লেখা এবং ফাইল তৈরি করা (এতে এনআইও 2 অন্তর্ভুক্ত)।


5
@ লেওনব্লয় আমি জানি এটি একটি পুরানো মন্তব্য, তবে কেউ যদি এটিকে দেখেন তবে কেন আপনি "সর্বদা উপকারী" না তা বোঝাতে আপনার মনে হবে? কমপক্ষে এখানে এটি "শীর্ষ দক্ষ" ডকসটি.অরাকল.com
হুয়ান

14
দেখে মনে হচ্ছে লেখকের কোনও রাইটেলন () পদ্ধতি নেই।
এটিতে

10
আপনি যদি লেখকের ধরণটি বাফারড্রাইটারে পরিবর্তন করেন (এটি আসলে এটি) তবে আপনি Writer.newLine ()
নাইকে

4
শেষ পর্যন্ত চেষ্টা করা / ধরা ভাল বলে মনে হচ্ছে না। আমি এর কারণটি জানি, তবে এটি একটি কোড গন্ধের মতো বলে মনে হচ্ছে।
ashes999

4
@ ট্রেনগোট এটি করে। close()অন্য যে কোনও চারপাশে মোড়ানো যেকোন স্ট্রিমকে কল করা সমস্ত অভ্যন্তরীণ স্ট্রিমগুলিও বন্ধ করে দেবে।
ফান্ড মনিকার লসুইট

132

আপনি যদি ফাইলটিতে ইতিমধ্যে লিখতে চান (এবং ফ্লাইতে উত্পন্ন হয় না) আপনার কাছে ইতিমধ্যে যদি থাকে তবে java.nio.file.Filesজাভা 7 এর যোগসূত্র আই / ও এর অংশ হিসাবে আপনার লক্ষ্য অর্জনের সবচেয়ে সহজ এবং সবচেয়ে কার্যকর উপায় সরবরাহ করে।

মূলত একটি ফাইল তৈরি এবং লেখার জন্য কেবল একটি লাইন, তদুপরি একটি সাধারণ পদ্ধতি কল !

এটি কীভাবে ব্যবহার করা যায় তা প্রদর্শনের জন্য নিম্নলিখিত উদাহরণটি 6 টি বিভিন্ন ফাইল তৈরি করে এবং লেখায়:

Charset utf8 = StandardCharsets.UTF_8;
List<String> lines = Arrays.asList("1st line", "2nd line");
byte[] data = {1, 2, 3, 4, 5};

try {
    Files.write(Paths.get("file1.bin"), data);
    Files.write(Paths.get("file2.bin"), data,
            StandardOpenOption.CREATE, StandardOpenOption.APPEND);
    Files.write(Paths.get("file3.txt"), "content".getBytes());
    Files.write(Paths.get("file4.txt"), "content".getBytes(utf8));
    Files.write(Paths.get("file5.txt"), lines, utf8);
    Files.write(Paths.get("file6.txt"), lines, utf8,
            StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
    e.printStackTrace();
}

সুন্দরভাবে সম্পন্ন. আমি ফাইল 5 এবং ফাইল 6 উদাহরণ পছন্দ করি। ফাইল 6 পরীক্ষা করার জন্য আপনি প্রোগ্রামটি দু'বার চালাচ্ছেন তা নিশ্চিত করুন, তারপরে আপনি এটি আবার লাইনগুলিতে সংযোজন করতে দেখবেন।
তাজবয়

76
public class Program {
    public static void main(String[] args) {
        String text = "Hello world";
        BufferedWriter output = null;
        try {
            File file = new File("example.txt");
            output = new BufferedWriter(new FileWriter(file));
            output.write(text);
        } catch ( IOException e ) {
            e.printStackTrace();
        } finally {
          if ( output != null ) {
            output.close();
          }
        }
    }
}

18
আউটপুট.ক্লোজ () একটি অবশেষে ব্লক করা ভাল না?
Qed

7
কেবল কোডটি এখানে কোনও উত্তর গঠন করতে পারে না। আপনাকে ব্যাখ্যা করতে হবে।
ব্যবহারকারী 207421

7
আসলে এটি সংকলন করবে না, output.close()আইওএক্সেপশন ছুড়ে ফেলেছে
বব

43

এখানে একটি ফাইল তৈরি বা ওভাররাইট করার জন্য একটি সামান্য উদাহরণ প্রোগ্রাম। এটি দীর্ঘ সংস্করণ যাতে এটি আরও সহজে বোঝা যায়।

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class writer {
    public void writing() {
        try {
            //Whatever the file path is.
            File statText = new File("E:/Java/Reference/bin/images/statsTest.txt");
            FileOutputStream is = new FileOutputStream(statText);
            OutputStreamWriter osw = new OutputStreamWriter(is);    
            Writer w = new BufferedWriter(osw);
            w.write("POTATO!!!");
            w.close();
        } catch (IOException e) {
            System.err.println("Problem writing to the file statsTest.txt");
        }
    }

    public static void main(String[]args) {
        writer write = new writer();
        write.writing();
    }
}

39

জাভাতে কোনও ফাইল তৈরি এবং লেখার একটি খুব সহজ উপায়:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class CreateFiles {

    public static void main(String[] args) {
        try{
            // Create new file
            String content = "This is the content to write into create file";
            String path="D:\\a\\hi.txt";
            File file = new File(path);

            // If file doesn't exists, then create it
            if (!file.exists()) {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);

            // Write in file
            bw.write(content);

            // Close connection
            bw.close();
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}

7
এখানে File.exists()/createNewFile()কোডটি অর্থহীন এবং অপব্যয় উভয়ই। অপারেটিং সিস্টেমটি ইতিমধ্যে ঠিক একই জিনিসটি new FileWriter()তৈরি করতে হবে যখন তৈরি করা হবে। আপনি সব কিছু দু'বার ঘটতে বাধ্য করছেন।
ব্যবহারকারী 207421

1
File.exists () / createNewFile () অর্থহীন এবং অপব্যয়কর নয়। ফাইলটি ইতিমধ্যে উপস্থিত রয়েছে কিনা তার ভিত্তিতে আমি বিভিন্ন কোড কার্যকর করার একটি উপায় খুঁজছিলাম। এটি খুব সহায়ক ছিল।
কিরস্টিবেল্যান্স

2
আমি এই পদ্ধতিটি ব্যবহার করেছি তবে আপনাকে জানতে হবে যে এটি প্রতিবার ফাইলটিকে ওভাররাইট করে। আপনি যদি ফাইলটি বিদ্যমান থাকতে চান তবে এটি সংযোজন করতে চান, আপনাকে FileWriterনীচের মত তদন্ত করতে হবে :new FileWriter(file.getAbsoluteFile(),true)
অ্যাডেলিন

2
এটি অর্থহীন এবং অপব্যয় উভয়ই , যে কারণে আমি বলেছি। আপনি দুটি অস্তিত্ব পরীক্ষা, দুটি সৃষ্টি এবং একটি মুছে ফেলার কারণ হচ্ছেন: এবং ফাইলটি ইতিমধ্যে উপস্থিত রয়েছে কি না তার উপর নির্ভর করে আপনি এখানে আলাদা কোড প্রয়োগ করছেন না
ব্যবহারকারী 207421

34

ব্যবহার করুন:

try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8))) {
    writer.write("text to write");
} 
catch (IOException ex) {
    // Handle me
}  

ব্যবহার try()করলে স্বয়ংক্রিয়ভাবে স্ট্রিম বন্ধ হবে। এই সংস্করণটি সংক্ষিপ্ত, দ্রুত (বাফার) এবং এনকোডিং চয়ন করতে সক্ষম করে।

এই বৈশিষ্ট্যটি জাভা 7 এ চালু হয়েছিল।


5
এটি লক্ষ করা উচিত যে এটি একটি জাভা 7 বৈশিষ্ট্য, তাই জাভার আগের সংস্করণগুলিতে কাজ করবে না।
ডান মন্দির

3
কেউ StandardCharsets.UTF_8"utf-8" স্ট্রিংয়ের পরিবর্তে "ধ্রুবক" ব্যবহার করতে পারে (এটি টাইপোর ফল্ট থেকে বাধা দেয়) ...new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8)...- java.nio.charset.StandardCharsetsজাভা 7-তে প্রবর্তিত হয়েছে
রাল্ফ

20

এখানে আমরা একটি পাঠ্য ফাইলে একটি স্ট্রিং লিখছি:

String content = "This is the content to write into a file";
File file = new File("filename.txt");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close(); // Be sure to close BufferedWriter

আমরা সহজেই একটি নতুন ফাইল তৈরি করতে এবং এতে সামগ্রী যুক্ত করতে পারি।


নোট করুন যে বাফারড্রাইটার বন্ধ করা যথেষ্ট, যেহেতু এটি ফাইল রাইটারটি বন্ধ করার ক্ষেত্রেও যত্ন নেয়।
rbaleksandar

17

যেহেতু লেখকরা ইওল'ড (সান এবং আইবিএম উভয়ই, এবং এগুলি প্রযুক্তিগতভাবে সর্বাধিক বিস্তৃত জেভিএম) হয়েছে এমন জাভা সংস্করণের জন্য কোনও সমাধানের প্রয়োজন কিনা তা নির্দিষ্ট করে দেয়নি এবং এই কারণে যে বেশিরভাগ লোক উত্তর দিয়েছে বলে মনে হচ্ছে এটি কোনও পাঠ্য (নন-বাইনারি) ফাইল তা নির্দিষ্ট করার আগে লেখকের প্রশ্ন , আমি আমার উত্তর দেওয়ার সিদ্ধান্ত নিয়েছি।


প্রথমত, জাভা 6 সাধারণত জীবনের শেষ প্রান্তে পৌঁছেছে, এবং যেহেতু লেখক তার উত্তরাধিকারের সামঞ্জস্যের প্রয়োজন তা নির্দিষ্ট করেন নি, আমার ধারণা এটি স্বয়ংক্রিয়ভাবে জাভা 7 বা তার বেশি হবে (জাভা 7 এখনও আইওএম দ্বারা ইওল নয়)। সুতরাং, আমরা আই / ও টিউটোরিয়াল ফাইলটি ঠিক দেখতে পারি: https://docs.oracle.com/javase/tutorial/essential/io/legacy.html

জাভা এসই 7 রিলিজের আগে java.io.File ক্লাসটি I / O ফাইলের জন্য ব্যবহৃত মেকানিজম ছিল, তবে এতে বেশ কিছু ত্রুটি ছিল।

  • অনেকগুলি পদ্ধতি ব্যর্থ হওয়ার পরে ব্যতিক্রম ছুঁড়ে দেয়নি, সুতরাং কার্যকর ত্রুটির বার্তাটি পাওয়া অসম্ভব ছিল। উদাহরণস্বরূপ, যদি কোনও ফাইল মোছা ব্যর্থ হয় তবে প্রোগ্রামটি একটি "মোছা ব্যর্থ" প্রাপ্ত করবে তবে ফাইলটির অস্তিত্ব নেই বলে ব্যবহারকারীর অনুমতি নেই, বা অন্য কোনও সমস্যা আছে তা এটি জানত না।
  • পুনরায় নামকরণের পদ্ধতিটি প্ল্যাটফর্মগুলির জুড়ে ধারাবাহিকভাবে কাজ করে না।
  • প্রতীকী লিঙ্কগুলির জন্য সত্যিকারের সমর্থন ছিল না।
  • মেটাডেটার জন্য আরও সমর্থন পছন্দ হয়েছিল যেমন ফাইল অনুমতি, ফাইলের মালিক এবং অন্যান্য সুরক্ষা বৈশিষ্ট্য। ফাইল মেটাডেটা অ্যাক্সেস অকার্যকর ছিল।
  • অনেক ফাইল পদ্ধতি স্কেল করেনি। একটি সার্ভারের উপরে একটি বৃহত্তর ডিরেক্টরি তালিকার অনুরোধের ফলে হ্যাং হতে পারে। বড় ডিরেক্টরিগুলি মেমরি রিসোর্সের সমস্যাও সৃষ্টি করতে পারে, যার ফলে পরিষেবাটি অস্বীকার করা যায়।
  • নির্ভরযোগ্য কোড লেখা সম্ভব ছিল না যা বৃত্তাকার প্রতীকী লিঙ্কগুলি থাকলে পুনরাবৃত্তভাবে একটি ফাইল ট্রি হাঁটতে এবং যথাযথ প্রতিক্রিয়া জানাতে পারে।

ওহ ভাল, এটি java.io.File বাতিল করে। যদি কোনও ফাইল লিখিত / সংযোজন করা যায় না, তবে আপনি এটি কেন জানতে পারবেন না।


আমরা টিউটোরিয়ালটি অব্যাহত রাখতে পারি: https://docs.oracle.com/javase/tutorial/essential/io/file.html#common

আপনার যদি সমস্ত লাইন থাকে তবে আপনি আগে থেকে পাঠ্য ফাইলটিতে (সংযোজন) লিখবেন , প্রস্তাবিত পন্থাটি https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html# লেখা-java.nio.file.Path-java.lang.Iterable-java.nio.charset.Charset-java.nio.file.OpenOption ...-

এখানে একটি উদাহরণ দেওয়া হয়েছে (সরলীকৃত):

Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, StandardCharsets.UTF_8);

আরেকটি উদাহরণ (সংযোজন):

Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE);

আপনি যেমন যান ফাইল ফাইলটি লিখতে চান : https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedWriter-java.nio.file.Path-java .nio.charset.Charset-java.nio.file.OpenOption ...-

সরলীকৃত উদাহরণ (জাভা 8 বা তার বেশি):

Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file)) {
    writer.append("Zero header: ").append('0').write("\r\n");
    [...]
}

আরেকটি উদাহরণ (সংযোজন):

Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) {
    writer.write("----------");
    [...]
}

এই পদ্ধতিগুলির জন্য লেখকের পক্ষে সর্বনিম্ন প্রচেষ্টা প্রয়োজন এবং [পাঠ্য] ফাইলগুলিতে লেখার সময় অন্য সকলের কাছে পছন্দ করা উচিত।


'যদি কোনও ফাইল লিখিত / সংযোজন করা না যায়, তবে আপনি কেন এটি সঠিক তা জানতে পারবেন না'। FileNotFoundExceptionঅপারেশন ব্যর্থ হওয়ার পরে যে পাঠানো হয়েছে তার পাঠ্য থেকেই আপনি ঠিক বুঝতে পারবেন ।
ব্যবহারকারী 207421

"অনেক ব্যর্থতা ব্যর্থ হওয়ার পরে ব্যতিক্রম ছুঁড়ে ফেলেনি, সুতরাং একটি দরকারী ত্রুটি বার্তা প্রাপ্তি করা অসম্ভব example উদাহরণস্বরূপ, যদি কোনও ফাইল মোছা ব্যর্থ হয় তবে প্রোগ্রামটি একটি" মোছা ফেল "পেতে পারে তবে তা জানত না কারণ এটি ছিল কিনা ফাইলটির অস্তিত্ব ছিল না, ব্যবহারকারীর অনুমতি নেই বা অন্য কোনও সমস্যা ছিল।
afk5min

আমি কি লিখেছি তা পড়ুন। ' যদি কোনও ফাইল লিখিত / সংযোজন করা যায় না, আপনি এমনকি একটি কার্যকর ত্রুটি বার্তা পেতে সক্ষম নাও হতে পারেন' ভুল, কারণটি আমি বলেছি, এবং তাই রয়েছে। আপনি বিষয় পরিবর্তন করছেন। আপনার নিজস্ব বিষয়।
ব্যবহারকারী 207421

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

এটির কারণটি হ'ল আপনি যে পদ্ধতিগুলিতে কল করছেন তার কোনওটিই যথাযথ ত্রুটি বার্তাগুলি সহ উপযুক্ত ব্যতিক্রম ছোঁড়াতে ব্যর্থ। আপনার যদি এমন একটি পাল্টা নমুনা রয়েছে যা আপনার দৃ supports় প্রতিবেদনের সমর্থন করে তবে এটি সরবরাহ করা আপনার উপর নির্ভর করে।
ব্যবহারকারী 207421

16

আপনি যদি তুলনামূলক ব্যথা মুক্ত অভিজ্ঞতা অর্জন করতে চান তবে আপনি অ্যাপাচি কমন্স আইও প্যাকেজটি দেখতে পাবেন , আরও নির্দিষ্টভাবে FileUtilsক্লাস

তৃতীয় পক্ষের গ্রন্থাগারগুলি চেক করতে ভুলবেন না। তারিখের কারসাজির জন্য জোদা-সময় , সাধারণ স্ট্রিং ক্রিয়াকলাপের জন্য অ্যাপাচি কমন্স ল্যাংStringUtils এবং এ জাতীয় কোডগুলি আপনার পাঠকে আরও পঠনযোগ্য করে তুলতে পারে।

জাভা একটি দুর্দান্ত ভাষা তবে মানক গ্রন্থাগারটি কখনও কখনও কিছুটা নিম্ন-স্তরের হয়। শক্তিশালী, তবে তবুও নিম্ন-স্তরের।


1
সবচেয়ে সহজ ফাইল-রাইটিং পদ্ধতিটি FileUtilsহ'ল static void write(File file, CharSequence data)। উদাহরণ ব্যবহার: import org.apache.commons.io.FileUtils; FileUtils.write(new File("example.txt"), "string with data");FileUtilsএছাড়াও আছে writeLines, যা Collectionলাইন একটি লাগে ।
ররি ও'কেনে

12

কোনো কারণে আপনি তৈরি এবং লেখা, জাভা সমতুল্য আইন আলাদা করতে চান touchহয়

try {
   //create a file named "testfile.txt" in the current working directory
   File myFile = new File("testfile.txt");
   if ( myFile.createNewFile() ) {
      System.out.println("Success!");
   } else {
      System.out.println("Failure!");
   }
} catch ( IOException ioe ) { ioe.printStackTrace(); }

createNewFile()একটি অস্তিত্ব যাচাই করে এবং ফাইল তৈরি করে পারমাণবিকভাবে। উদাহরণস্বরূপ, আপনি এটির লেখার আগে আপনি ফাইলটির স্রষ্টা ছিলেন কিনা তা নিশ্চিত করতে চাইলে এটি কার্যকর হতে পারে।


1
[স্পর্শ] পার্শ্ব প্রতিক্রিয়া হিসাবে ফাইলের টাইমস্ট্যাম্প আপডেট করে (এটি ইতিমধ্যে উপস্থিত থাকলে)। এটিরও কি সেই পার্শ্ব প্রতিক্রিয়া আছে?
এপি-ইনাগো

@ এপি-ইনাগো: আমার সিস্টেমে এটি অবশ্যই কার্যকর হয়নি (এটি কেবল মিথ্যা প্রত্যাবর্তন করে এবং ফাইলটির কোনও প্রভাব নেই)। আমি touchসাধারণ অর্থে নয় বরং এটিতে ডেটা না লিখে কোনও ফাইল তৈরির সাধারণ গৌণ ব্যবহারের অর্থ নয়। স্পর্শের নথিভুক্ত উদ্দেশ্য হ'ল ফাইলটিতে টাইমস্ট্যাম্প আপডেট করা। ফাইলটি উপস্থিত না থাকলে এটি তৈরি করা সত্যই এর পার্শ্ব প্রতিক্রিয়া, এবং একটি স্যুইচ দিয়ে অক্ষম করা যেতে পারে।
মার্ক পিটারস

কোন কারণে যেমন কি? এই exists()/createNewFile()ক্রমগুলি আক্ষরিক অর্থে সময় এবং স্থানের অপচয় of
ব্যবহারকারী 207421

12

জাভাতে একটি ফাইল তৈরি এবং লেখার সম্ভাব্য কয়েকটি উপায় এখানে রইল:

ফাইলআউটপুট স্ট্রিম ব্যবহার করা

try {
  File fout = new File("myOutFile.txt");
  FileOutputStream fos = new FileOutputStream(fout);
  BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
  bw.write("Write somthing to the file ...");
  bw.newLine();
  bw.close();
} catch (FileNotFoundException e){
  // File was not found
  e.printStackTrace();
} catch (IOException e) {
  // Problem when writing to the file
  e.printStackTrace();
}

ফাইল রাইটার ব্যবহার করে

try {
  FileWriter fw = new FileWriter("myOutFile.txt");
  fw.write("Example of content");
  fw.close();
} catch (FileNotFoundException e) {
  // File not found
  e.printStackTrace();
} catch (IOException e) {
  // Error when writing to the file
  e.printStackTrace();
}

প্রিন্ট রাইটার ব্যবহার করে

try {
  PrintWriter pw = new PrintWriter("myOutFile.txt");
  pw.write("Example of content");
  pw.close();
} catch (FileNotFoundException e) {
  // File not found
  e.printStackTrace();
} catch (IOException e) {
  // Error when writing to the file
  e.printStackTrace();
}

আউটপুটস্ট্রিম রাইটার ব্যবহার করা

try {
  File fout = new File("myOutFile.txt");
  FileOutputStream fos = new FileOutputStream(fout);
  OutputStreamWriter osw = new OutputStreamWriter(fos);
  osw.write("Soe content ...");
  osw.close();
} catch (FileNotFoundException e) {
  // File not found
  e.printStackTrace();
} catch (IOException e) {
  // Error when writing to the file
  e.printStackTrace();
}

জাভাতে ফাইলগুলি কীভাবে পড়তে এবং লিখতে হয় সে সম্পর্কে এই টিউটোরিয়ালটি আরও পরীক্ষা করে দেখুন ।


শুধু ভাবছি ... করা উচিত নয় FileWriterবা OutputStreamWriterএকটি বন্ধ হয়ে যাবে পরিশেষে অবরোধ করবেন?
ওল্ফগ্যাং শ্রেরস

@ ওল্ফগ্যাংশ্রেয়ারস, হ্যাঁ, এটি আরও ভাল, এটি করতে সক্ষম হবার জন্য আমাকে পরিবর্তনশীল ঘোষণার বাইরে নিয়ে যেতে হবে।
মেহেদী

আমি কেবল বুঝতে পেরেছি যে এমনকি ক্লিনার হলেও অটো-ক্লোজেবলের ব্যবহার করা, যদি কোনও ব্যতিক্রম ঘটে তবে স্পষ্টতই একটি অবশেষে ব্লক যুক্ত করা দরকার) এমনকি ব্লক এবং সংস্থানসমূহের বাইরে চলক ঘোষণা করার দরকার নেই স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে। দেখুন: docs.oracle.com/javase/tutorial/essential/exceptions/...
উলফগ্যাং Schreurs

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

10

ব্যবহার করুন:

JFileChooser c = new JFileChooser();
c.showOpenDialog(c);
File writeFile = c.getSelectedFile();
String content = "Input the data here to be written to your file";

try {
    FileWriter fw = new FileWriter(writeFile);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.append(content);
    bw.append("hiiiii");
    bw.close();
    fw.close();
}
catch (Exception exc) {
   System.out.println(exc);
}

এটি আমি খুঁজে পাওয়া সবচেয়ে সহজতম উপায় ... সমস্ত সমস্যা এখানে সমাধান করা হয়েছে এবং কেবল পাঠ্য সন্নিবেশ করা দরকার
রোহিত জেডপি

10

জাভা 7 ব্যবহারের সর্বোত্তম উপায়: জাভা 7 একটি নতুন ইউটিলিটি ক্লাস - ফাইলগুলির সাথে ফাইল সিস্টেমের সাথে কাজ করার একটি নতুন উপায় প্রবর্তন করে। ফাইল ক্লাস ব্যবহার করে আমরা ফাইল এবং ডিরেক্টরিগুলি তৈরি, সরানো, অনুলিপি, মুছতে পারি; এটি ফাইল পড়তে ও লিখতেও ব্যবহার করা যেতে পারে।

public void saveDataInFile(String data) throws IOException {
    Path path = Paths.get(fileName);
    byte[] strToBytes = data.getBytes();

    Files.write(path, strToBytes);
}

ফাইলচ্যানেল দিয়ে লিখুন আপনি যদি বড় ফাইলগুলির সাথে লেনদেন করেন তবে ফাইলচ্যানেল স্ট্যান্ডার্ড আইওর চেয়ে দ্রুততর হতে পারে। নিম্নলিখিত কোড ফাইলচ্যানেল ব্যবহার করে একটি স্ট্রিং স্ট্রিং করে:

public void saveDataInFile(String data) 
  throws IOException {
    RandomAccessFile stream = new RandomAccessFile(fileName, "rw");
    FileChannel channel = stream.getChannel();
    byte[] strBytes = data.getBytes();
    ByteBuffer buffer = ByteBuffer.allocate(strBytes.length);
    buffer.put(strBytes);
    buffer.flip();
    channel.write(buffer);
    stream.close();
    channel.close();
}

ডেটাআউটপুট স্ট্রিম দিয়ে লিখুন

public void saveDataInFile(String data) throws IOException {
    FileOutputStream fos = new FileOutputStream(fileName);
    DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos));
    outStream.writeUTF(data);
    outStream.close();
}

ফাইলআউটপুট স্ট্রিম দিয়ে লিখুন

আসুন এখন দেখুন কীভাবে আমরা কোনও ফাইলটিতে বাইনারি ডেটা লিখতে ফাইলআউটপুটস্ট্রিম ব্যবহার করতে পারি। নিম্নলিখিত কোডটি একটি স্ট্রিং ইন্ট বাইটকে রূপান্তর করে এবং ফাইলআউটপুট স্ট্রিম ব্যবহার করে ফাইলগুলিতে বাইটগুলি লিখে:

public void saveDataInFile(String data) throws IOException {
    FileOutputStream outputStream = new FileOutputStream(fileName);
    byte[] strToBytes = data.getBytes();
    outputStream.write(strToBytes);

    outputStream.close();
}

প্রিন্ট রাইটার দিয়ে লিখুন আমরা কোনও ফাইলটিতে ফর্ম্যাট করা পাঠ্য প্রিন্ট রাইটার ব্যবহার করতে পারি:

public void saveDataInFile() throws IOException {
    FileWriter fileWriter = new FileWriter(fileName);
    PrintWriter printWriter = new PrintWriter(fileWriter);
    printWriter.print("Some String");
    printWriter.printf("Product name is %s and its price is %d $", "iPhone", 1000);
    printWriter.close();
}

বাফারডাইটারের সাথে লিখুন: একটি নতুন ফাইলে একটি স্ট্রিং লিখতে বাফারড্রাইটার ব্যবহার করুন:

public void saveDataInFile(String data) throws IOException {
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
    writer.write(data);

    writer.close();
}

বিদ্যমান ফাইলটিতে একটি স্ট্রিং যুক্ত করুন:

public void saveDataInFile(String data) throws IOException {
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
    writer.append(' ');
    writer.append(data);

    writer.close();
}

9

আমি মনে করি এটি সবচেয়ে সংক্ষিপ্ততম উপায়:

FileWriter fr = new FileWriter("your_file_name.txt"); // After '.' write
// your file extention (".txt" in this case)
fr.write("Things you want to write into the file"); // Warning: this will REPLACE your old file content!
fr.close();

8

বিদ্যমান ফাইলটি ওভাররাইট না করে ফাইল তৈরি করতে:

System.out.println("Choose folder to create file");
JFileChooser c = new JFileChooser();
c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
c.showOpenDialog(c);
c.getSelectedFile();
f = c.getSelectedFile(); // File f - global variable
String newfile = f + "\\hi.doc";//.txt or .doc or .html
File file = new File(newfile);

try {
    //System.out.println(f);
    boolean flag = file.createNewFile();

    if(flag == true) {
        JOptionPane.showMessageDialog(rootPane, "File created successfully");
    }
    else {
        JOptionPane.showMessageDialog(rootPane, "File already exists");
    }
    /* Or use exists() function as follows:
        if(file.exists() == true) {
            JOptionPane.showMessageDialog(rootPane, "File already exists");
        }
        else {
            JOptionPane.showMessageDialog(rootPane, "File created successfully");
        }
    */
}
catch(Exception e) {
    // Any exception handling method of your choice
}

7
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriterExample {
    public static void main(String [] args) {
        FileWriter fw= null;
        File file =null;
        try {
            file=new File("WriteFile.txt");
            if(!file.exists()) {
                file.createNewFile();
            }
            fw = new FileWriter(file);
            fw.write("This is an string written to a file");
            fw.flush();
            fw.close();
            System.out.println("File written Succesfully");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

এই exists()/createNewFile()ক্রমগুলি আক্ষরিক অর্থে সময় এবং স্থানের অপচয় of
ব্যবহারকারী 207421

6
package fileoperations;
import java.io.File;
import java.io.IOException;

public class SimpleFile {
    public static void main(String[] args) throws IOException {
        File file =new File("text.txt");
        file.createNewFile();
        System.out.println("File is created");
        FileWriter writer = new FileWriter(file);

        // Writes the content to the file
        writer.write("Enter the text that you want to write"); 
        writer.flush();
        writer.close();
        System.out.println("Data is entered into file");
    }
}

এই exists()/createNewFile()ক্রমগুলি আক্ষরিক অর্থে সময় এবং স্থানের অপচয় of
ব্যবহারকারী 207421

5

এক লাইনেই! pathএবং lineস্ট্রিং হয়

import java.nio.file.Files;
import java.nio.file.Paths;

Files.write(Paths.get(path), lines.getBytes());

আহেম, লেখক স্পষ্টভাবে "পাঠ্য" ফাইলগুলি নির্দিষ্ট করেছেন। এবং পাঠ্য ফাইলগুলি অক্ষরের সমন্বয়ে গঠিত। বাইনারি ফাইলগুলি বাইট সমন্বয়ে গঠিত। এটি বাদে, এটি কী অস্পষ্ট lines। যদি এটি হয় java.lang.Stringতবে কলিং প্ল্যাটফর্মের ডিফল্ট এনকোডিং getBytes()ব্যবহার করে বাইট তৈরি করবে যা সাধারণ ক্ষেত্রে খুব ভাল নয়।
afk5min

5

সবচেয়ে সহজ উপায় আমি খুঁজে পেতে পারি:

Path sampleOutputPath = Paths.get("/tmp/testfile")
try (BufferedWriter writer = Files.newBufferedWriter(sampleOutputPath)) {
    writer.write("Hello, world!");
}

এটি সম্ভবত কেবল 1.7+ এর জন্য কাজ করবে।


5

জাভা 7+ এর জন্য এটি চেষ্টা করার মতো:

 Files.write(Paths.get("./output.txt"), "Information string herer".getBytes());

এটি আশাব্যঞ্জক দেখাচ্ছে ...


4

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

public static void main(String[] args) {
    Path FILE_PATH = Paths.get("C:/temp", "temp.txt");
    String text = "\n Welcome to Java 8";

    //Writing to the file temp.txt
    try (BufferedWriter writer = Files.newBufferedWriter(FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
        writer.write(text);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

এখানে কয়েকটি বিষয় উল্লেখযোগ্য:

  1. চারসেট এনকোডিং নির্দিষ্ট করা সর্বদা একটি ভাল অভ্যাস এবং তার জন্য আমাদের ক্লাসে ধ্রুবক রয়েছে StandardCharsets
  2. try-with-resourceকোডটিতে বিবৃতি ব্যবহার করা হয়েছে যাতে চেষ্টা করার পরে সংস্থানগুলি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।

যদিও ওপিকে জিজ্ঞাসা করা হয়নি তবে কেবল সেক্ষেত্রে confidentialআমরা কিছু নির্দিষ্ট কীওয়ার্ডযুক্ত রেখাগুলি সন্ধান করতে চাই যেমন জাভাতে স্ট্রিম এপিআই ব্যবহার করতে পারি:

//Reading from the file the first line which contains word "confidential"
try {
    Stream<String> lines = Files.lines(FILE_PATH);
    Optional<String> containsJava = lines.filter(l->l.contains("confidential")).findFirst();
    if(containsJava.isPresent()){
        System.out.println(containsJava.get());
    }
} catch (IOException e) {
    e.printStackTrace();
}

4

ইনপুট এবং আউটপুটস্ট্রিম ব্যবহার করে ফাইল পড়া এবং লেখা:

//Coded By Anurag Goel
//Reading And Writing Files
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


public class WriteAFile {
    public static void main(String args[]) {
        try {
            byte array [] = {'1','a','2','b','5'};
            OutputStream os = new FileOutputStream("test.txt");
            for(int x=0; x < array.length ; x++) {
                os.write( array[x] ); // Writes the bytes
            }
            os.close();

            InputStream is = new FileInputStream("test.txt");
            int size = is.available();

            for(int i=0; i< size; i++) {
                System.out.print((char)is.read() + " ");
            }
            is.close();
        } catch(IOException e) {
            System.out.print("Exception");
        }
    }
}

4

এই প্যাকেজটি কেবল অন্তর্ভুক্ত করুন:

java.nio.file

এবং তারপরে আপনি ফাইলটি লেখার জন্য এই কোডটি ব্যবহার করতে পারেন:

Path file = ...;
byte[] buf = ...;
Files.write(file, buf);

4

জাভা 8-এ ফাইল এবং পাথ এবং সংস্থান-ব্যবহার-সংস্থান ব্যবহার করে ব্যবহার করুন।

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class WriteFile{
    public static void main(String[] args) throws IOException {
        String file = "text.txt";
        System.out.println("Writing to file: " + file);
        // Files.newBufferedWriter() uses UTF-8 encoding by default
        try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(file))) {
            writer.write("Java\n");
            writer.write("Python\n");
            writer.write("Clojure\n");
            writer.write("Scala\n");
            writer.write("JavaScript\n");
        } // the file will be automatically closed
    }
}

3

কিছু সহজ উপায় আছে:

File file = new File("filename.txt");
PrintWriter pw = new PrintWriter(file);

pw.write("The world I'm coming");
pw.close();

String write = "Hello World!";

FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);

fw.write(write);

fw.close();

bwঅব্যবহৃত।
ব্যবহারকারী 207421

এবং নতুন সামগ্রীতে ফাইলটি ওভাররাইটিংয়ের বিন্দুটি বলা হয়নি।
ব্যবহারকারী 207421

3

এমনকি আপনি কোনও সিস্টেম সম্পত্তি ব্যবহার করে একটি অস্থায়ী ফাইল তৈরি করতে পারেন , যা আপনি কোন ওএস ব্যবহার করছেন তা থেকে স্বতন্ত্র।

File file = new File(System.*getProperty*("java.io.tmpdir") +
                     System.*getProperty*("file.separator") +
                     "YourFileName.txt");

2

গুগলের পেয়ারা লাইব্রেরি ব্যবহার করে আমরা খুব সহজেই একটি ফাইল তৈরি এবং লিখতে পারি।

package com.zetcode.writetofileex;

import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;

public class WriteToFileEx {

    public static void main(String[] args) throws IOException {

        String fileName = "fruits.txt";
        File file = new File(fileName);

        String content = "banana, orange, lemon, apple, plum";

        Files.write(content.getBytes(), file);
    }
}

উদাহরণটি fruits.txtপ্রকল্পের রুট ডিরেক্টরিতে একটি নতুন ফাইল তৈরি করে ।


2

গ্রাহকদের সাথে সংগ্রহ পড়া এবং জে ফাইলেখোজারের সাথে ফাইল জমা করা।

private void writeFile(){

    JFileChooser fileChooser = new JFileChooser(this.PATH);
    int retValue = fileChooser.showDialog(this, "Save File");

    if (retValue == JFileChooser.APPROVE_OPTION){

        try (Writer fileWrite = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileChooser.getSelectedFile())))){

            this.customers.forEach((c) ->{
                try{
                    fileWrite.append(c.toString()).append("\n");
                }
                catch (IOException ex){
                    ex.printStackTrace();
                }
            });
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}

2

ফাইল তৈরি এবং এটি লেখার কমপক্ষে কয়েকটি উপায় রয়েছে:

ছোট ফাইল (1.7)

আপনি কোনও ফাইলে বাইট বা লাইন লিখতে লেখার পদ্ধতির একটি ব্যবহার করতে পারেন।

Path file = Paths.get("path-to-file");
byte[] buf = "text-to-write-to-file".;
Files.write(file, buf);

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

বাফার্ড স্ট্রিম আই / ও ব্যবহার করে বড় ফাইল রচনা (1.7)

java.nio.fileপ্যাকেজ সমর্থন চ্যানেল আই / আউটপুট, যা প্যাচসমূহ বাফার ডাটা, স্তর মধ্যে কেউ কেউ এই বোতলের পাবেনা আমি স্ট্রিম ইনপুট / আউটপুট বাইপাস করে।

String s = "much-larger-text-to-write-to-file";
try (BufferedWriter writer = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) {
    writer.write(s, 0, s.length());
}

দক্ষতার সাথে দক্ষতার কারণে এই পদ্ধতির বিষয়টি অগ্রাধিকারযোগ্য, বিশেষত যখন প্রচুর পরিমাণে লেখার কাজ শেষ করে। বাফার অপারেশনগুলির এই প্রভাব রয়েছে কারণ তাদের ব্যয়বহুল আই / ও ক্রিয়াকলাপ হ্রাস করে প্রতিটি একক বাইটের জন্য অপারেটিং সিস্টেমের লেখার পদ্ধতিটি কল করার প্রয়োজন নেই।

আউটপুটসট্রিম (1.7) সহ একটি ফাইল অনুলিপি করতে (এবং একটি নতুন তৈরি করতে) এনআইও এপিআই ব্যবহার করে

Path oldFile = Paths.get("existing-file-path");
Path newFile = Paths.get("new-file-path");
try (OutputStream os = new FileOutputStream(newFile.toFile())) {
    Files.copy(oldFile, os);
}

এছাড়াও অতিরিক্ত পদ্ধতি রয়েছে যা কোনও ইনপুট স্ট্রিম থেকে কোনও ফাইলে সমস্ত বাইট অনুলিপি করতে দেয়।

ফাইল রাইটার (পাঠ্য) (<1.7)

সরাসরি ফাইলে লেখেন (কম পারফরম্যান্স) এবং লেখকের সংখ্যা কম হলেই ব্যবহার করা উচিত। একটি ফাইলে অক্ষর-ভিত্তিক ডেটা লিখতে ব্যবহৃত হয়।

String s= "some-text";
FileWriter fileWriter = new FileWriter("C:\\path\\to\\file\\file.txt");
fileWriter.write(fileContent);
fileWriter.close();

ফাইলআউটপুট স্ট্রিম (বাইনারি) (<1.7)

ফাইলআউটপুট স্ট্রিম চিত্রের ডেটার মতো কাঁচা বাইটের স্ট্রিম লেখার জন্য বোঝানো হয়।

byte data[] = "binary-to-write-to-file".getBytes();
FileOutputStream out = new FileOutputStream("file-name");
out.write(data);
out.close();

এই পদ্ধতির সাথে একবারে একটি বাইট লেখার চেয়ে সর্বদা বাইটের অ্যারে লিখতে বিবেচনা করা উচিত। গতিপথটি বেশ তাৎপর্যপূর্ণ হতে পারে - 10 x উচ্চতর বা তারও বেশি। সুতরাং write(byte[])যখনই সম্ভব পদ্ধতিগুলি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে ।

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