জাভাতে বিদ্যমান ফাইলটিতে কীভাবে পাঠ্য সংযুক্ত করা যায়


683

আমার জাভাতে থাকা একটি বিদ্যমান ফাইলে বারবার পাঠ্য সংযোজন করা দরকার। আমি কেমন করে ঐটি করি?

উত্তর:


793

আপনি লগিংয়ের উদ্দেশ্যে এটি করছেন? যদি হয় তবে এর জন্য বেশ কয়েকটি গ্রন্থাগার রয়েছে । সর্বাধিক জনপ্রিয় দুটি হ'ল লগ 4 এবং লগব্যাক

জাভা 7+

আপনার যদি কেবল একবার এটি করার দরকার হয় তবে ফাইল শ্রেণি এটিকে সহজ করে তোলে:

try {
    Files.write(Paths.get("myfile.txt"), "the text".getBytes(), StandardOpenOption.APPEND);
}catch (IOException e) {
    //exception handling left as an exercise for the reader
}

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

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

try(FileWriter fw = new FileWriter("myfile.txt", true);
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter out = new PrintWriter(bw))
{
    out.println("the text");
    //more code
    out.println("more text");
    //more code
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

মন্তব্য:

  • FileWriterকনস্ট্রাক্টরের দ্বিতীয় প্যারামিটার একটি নতুন ফাইল লেখার পরিবর্তে ফাইলটিতে সংযোজন করতে বলবে। (যদি ফাইলটি না থাকে তবে এটি তৈরি করা হবে))
  • BufferedWriterব্যয়বহুল লেখকের জন্য ব্যবহার করার পরামর্শ দেওয়া হয় (যেমনFileWriter )।
  • একটি ব্যবহার PrintWriterআপনাকে printlnসিনট্যাক্সের অ্যাক্সেস দেয় যা আপনি সম্ভবত ব্যবহার করেছেন System.out
  • তবে BufferedWriterএবং PrintWriterর‍্যাপারগুলি কঠোরভাবে প্রয়োজনীয় নয়।

পুরানো জাভা

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myfile.txt", true)));
    out.println("the text");
    out.close();
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

ব্যতিক্রম হ্যান্ডলিং

আপনার যদি পুরানো জাভাটির জন্য শক্তিশালী ব্যতিক্রম হ্যান্ডলিংয়ের প্রয়োজন হয় তবে এটি খুব ভার্বোস হয়:

FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter out = null;
try {
    fw = new FileWriter("myfile.txt", true);
    bw = new BufferedWriter(fw);
    out = new PrintWriter(bw);
    out.println("the text");
    out.close();
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}
finally {
    try {
        if(out != null)
            out.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    try {
        if(bw != null)
            bw.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    try {
        if(fw != null)
            fw.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
}

31
আপনি হয় java7 টি রিসোর্স-উইথ রিসোর্স ব্যবহার করতে পারেন বা ফাইলটিকে ব্যতিক্রমের ক্ষেত্রে বন্ধ করা হয়েছে কিনা তা নিশ্চিত করার জন্য একটি শেষ অবধি বন্ধ করতে হবে
স্বেতলিন জারেভ

1
জাভা 7 সিনট্যাক্সের সাথে আপডেট হয়েছে। ব্যতিক্রম হ্যান্ডলিং এখনও পাঠকের জন্য অনুশীলন হিসাবে বাকি আছে, তবে মন্তব্যটি আরও স্পষ্ট করে তুলেছে।
কিপ

3
কল্পনা করতে দিন যে new BufferedWriter(...)একটি ব্যতিক্রম ছোঁড়ে; হবে FileWriterবন্ধ হয়ে যাবে? আমি অনুমান করি যে এটি বন্ধ হবে না, কারণ close()পদ্ধতিটি (সাধারণ অবস্থায়) outঅবজেক্টটিতে ডাকা হবে , যা এই ক্ষেত্রে শুরু করা হবে না - সুতরাং বাস্তবে close()পদ্ধতিটি চাওয়া হবে না -> ফাইলটি খোলা হবে, তবে বন্ধ হবে না। সুতরাং আইএমএইচও tryবিবৃতিটি দেখতে এইরকম হওয়া try(FileWriter fw = new FileWriter("myFile.txt")){ Print writer = new ....//code goes here } উচিত flush()এবং tryব্লকটি প্রস্থান করার আগে তাঁর লেখক হওয়া উচিত !!!
স্বেতলিন জেরেভ

5
সতর্কতা, "পুরানো জাভা" উদাহরণটি চেষ্টা ব্লকের ভিতরে কোনও ব্যতিক্রম ছুঁড়ে ফেলা হলে যথাযথভাবে স্ট্রিমটি বন্ধ করবে না।
এমিলি এল।

1
জাভা 7 পদ্ধতির সাহায্যে কয়েকটি সম্ভাব্য "গেটছস": (1) ফাইলটি ইতিমধ্যে উপস্থিত না থাকলে StandardOpenOption.APPENDএটি তৈরি করবে না - নীরব ব্যর্থতার মতো এটি কোনও ব্যতিক্রম ছুঁড়ে না বলে won't (২) ব্যবহারের .getBytes()অর্থ হবে সংযুক্ত পাঠ্যের আগে বা পরে কোনও রিটার্ন চরিত্র নেই। এগুলির সমাধানের জন্য একটি বিকল্প উত্তর যুক্ত করেছেন ।
স্টিভ চেম্বারস

166

সংযোজন জন্য fileWriterআপনি একটি পতাকা সেট করে ব্যবহার করতে পারেন true

try
{
    String filename= "MyFile.txt";
    FileWriter fw = new FileWriter(filename,true); //the true will append the new data
    fw.write("add a line\n");//appends the string to the file
    fw.close();
}
catch(IOException ioe)
{
    System.err.println("IOException: " + ioe.getMessage());
}

9
close@ ইটেকের উত্তরেfinally যেমন দেখানো হয়েছে তেমনভাবে ব্লকে স্থাপন করা উচিত যদি ফাইলআরাইটার তৈরি করা এবং বন্ধ করার অনুরোধের ব্যতিক্রম হয়।
Pshemo

5
ভাল উত্তর, যদিও "\ n" এর পরিবর্তে নতুন লাইনের জন্য System.getProperty ("line.separator") ব্যবহার করা ভাল।
হেনরি ঝু

@ ডকোডযুক্ত আমি এই উত্তরটি আপনার সম্পাদনাটি ফিরিয়ে দিয়েছি, কারণ এটি সংকলন করে না।
কিপ

@ কিপ, সমস্যা কি ছিল? আমি অবশ্যই একটি "টাইপো" লিখেছি।
সঙ্কেতমুক্ত

2
রিসোর্স-এর সাথে কীভাবে চেষ্টা করবেন? try(FileWriter fw = new FileWriter(filename,true)){ // Whatever }catch(IOException ex){ ex.printStackTrace(); }
php_coder_3809625

72

চেষ্টা / ক্যাপ ব্লক সহ উত্তরগুলির সমস্তগুলিতে একটি অবশেষে ব্লকটিতে থাকা ক্লোস () টুকরা থাকা উচিত নয়?

চিহ্নিত উত্তরের উদাহরণ:

PrintWriter out = null;
try {
    out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)));
    out.println("the text");
} catch (IOException e) {
    System.err.println(e);
} finally {
    if (out != null) {
        out.close();
    }
} 

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

try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
    out.println("the text");
} catch (IOException e) {
    System.err.println(e);
}

1
যখন outসুযোগের বাইরে চলে যায় তখন এটি আবর্জনা-সংগৃহীত হয়ে গেলে স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়, তাই না? finallyব্লকটি সহ আপনার উদাহরণে , আমি মনে করি আপনার out.close()সঠিকভাবে মনে আছে তবে আপনাকে অন্য নেস্টেড চেষ্টা / ক্যাপচারের প্রয়োজন । জাভা 7 সমাধানটি বেশ চতুর! (আমি জাভা since এর পর থেকে কোনও জাভা দেব করছি না, তাই আমি সেই পরিবর্তনের সাথে অপরিচিত ছিলাম))
কিপ

1
@ কিপ নাপ, সুযোগের বাইরে যাওয়া জাভাতে কিছুই করে না। ফাইলটি ভবিষ্যতে এলোমেলো সময়ে বন্ধ হয়ে যাবে। (সম্ভবত প্রোগ্রামটি বন্ধ হয়ে গেলে)
নবীন

@Etech দ্বিতীয় পদ্ধতির পদ্ধতির প্রয়োজন হবে flush?
syfantid

43

সম্পাদনা করুন - অ্যাপাচি কমন্স ২.১ হিসাবে এটি করার সঠিক উপায় হ'ল:

FileUtils.writeStringToFile(file, "String to append", true);

অবশেষে ফাইলটি সঠিকভাবে বন্ধ করা অন্তর্ভুক্ত করার জন্য আমি @ কিপ এর সমাধানটি গ্রহণ করেছি:

public static void appendToFile(String targetFile, String s) throws IOException {
    appendToFile(new File(targetFile), s);
}

public static void appendToFile(File targetFile, String s) throws IOException {
    PrintWriter out = null;
    try {
        out = new PrintWriter(new BufferedWriter(new FileWriter(targetFile, true)));
        out.println(s);
    } finally {
        if (out != null) {
            out.close();
        }
    }
}


4
ওহ, আপনাকে ধন্যবাদ. অন্যান্য সমস্ত উত্তরের জটিলতায় আমি আনন্দিত হয়েছিলাম। লোকেরা কেন তাদের (বিকাশকারী) জীবন জটিল করতে পছন্দ করে তা আমি সত্যিই পাই না।
আলফায়া

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

@ বুফালো ঠিক আছে। তবে আপনি ফাইল লেখার আগে স্ট্রিংবিল্ডার সর্বদা বড় অংশগুলি (যা লেখার জন্য মূল্যবান) তৈরির জন্য ব্যবহার করতে পারেন।
কনস্টান্টিন কে

32

কিপের উত্তরে কিছুটা প্রসারিত করার জন্য, একটি ফাইলের সাথে একটি নতুন লাইন যুক্ত করার জন্য এখানে একটি সাধারণ জাভা 7+ পদ্ধতি রয়েছে , এটি ইতিমধ্যে বিদ্যমান না থাকলে এটি তৈরি করে :

try {
    final Path path = Paths.get("path/to/filename.txt");
    Files.write(path, Arrays.asList("New line to append"), StandardCharsets.UTF_8,
        Files.exists(path) ? StandardOpenOption.APPEND : StandardOpenOption.CREATE);
} catch (final IOException ioe) {
    // Add your own exception handling...
}

দ্রষ্টব্য:Files.write উপরেরটি ওভারলোড ব্যবহার করে যা কোনও ফাইলের পাঠ্যগুলির লাইন লেখায় (অর্থাত কোনও printlnকমান্ডের অনুরূপ )। কেবল শেষের দিকে পাঠ্য লিখতে (যেমন printকমান্ডের অনুরূপ ), Files.writeবাইট অ্যারেতে (যেমন "mytext".getBytes(StandardCharsets.UTF_8)) পাস করে একটি বিকল্প ওভারলোড ব্যবহার করা যেতে পারে ।


আপনার ফাইলটি উপস্থিত আছে কিনা তা পরীক্ষা করে দেখার দরকার আছে? আমি ভেবেছিলাম .CREATEআপনার জন্য কাজ করে।
LearningToJava

22

সমস্ত পরিস্থিতিতে স্ট্রিমটি সঠিকভাবে বন্ধ হয়ে গেছে তা নিশ্চিত করুন।

এটি কিছুটা উদ্বেগজনক যে এগুলির মধ্যে কতগুলি উত্তর ত্রুটির ক্ষেত্রে ফাইল হ্যান্ডেলটি ছেড়ে দেয়। উত্তরটি https://stackoverflow.com/a/15053443/2498188 টাকায় রয়েছে তবে কেবল BufferedWriter()তা ফেলে দিতে পারে না বলে। যদি এটি পারে তবে কোনও ব্যতিক্রম FileWriterঅবজেক্টটি খোলা রাখবে ।

এটি করার আরও একটি সাধারণ উপায় যা BufferedWriter()ফেলে দিতে পারে তা বিবেচ্য নয়:

  PrintWriter out = null;
  BufferedWriter bw = null;
  FileWriter fw = null;
  try{
     fw = new FileWriter("outfilename", true);
     bw = new BufferedWriter(fw);
     out = new PrintWriter(bw);
     out.println("the text");
  }
  catch( IOException e ){
     // File writing/opening failed at some stage.
  }
  finally{
     try{
        if( out != null ){
           out.close(); // Will close bw and fw too
        }
        else if( bw != null ){
           bw.close(); // Will close fw too
        }
        else if( fw != null ){
           fw.close();
        }
        else{
           // Oh boy did it fail hard! :3
        }
     }
     catch( IOException e ){
        // Closing the file writers failed for some obscure reason
     }
  }

সম্পাদনা:

জাভা 7 হিসাবে, প্রস্তাবিত উপায়টি হ'ল "সংস্থানগুলির সাথে চেষ্টা করুন" ব্যবহার করুন এবং জেভিএমকে এটির সাথে যোগাযোগ করুন:

  try(    FileWriter fw = new FileWriter("outfilename", true);
          BufferedWriter bw = new BufferedWriter(fw);
          PrintWriter out = new PrintWriter(bw)){
     out.println("the text");
  }  
  catch( IOException e ){
      // File writing/opening failed at some stage.
  }

জাভা 7 সহ সঠিক এআরএমের জন্য +1 this. এই কৌশলযুক্ত থিমটি সম্পর্কে এখানে ভাল প্রশ্ন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 12552863/…
ভাদজিম

1
হুম, কিছু কারণে PrintWriter.close()হিসেবে ঘোষণা করা হয় না throws IOExceptionডক্স । তার দিকে তাকিয়ে উৎস , close()পদ্ধতি, প্রকৃতপক্ষে, নিক্ষেপ করতে পারবে না IOException, কারণ এটা অন্তর্নিহিত স্ট্রীম থেকে ক্যাচ, এবং একটি পতাকা সেট করে। সুতরাং আপনি যদি পরবর্তী স্পেস শাটল বা এক্স-রে ডোজ মিটারিং সিস্টেমের কোডটিতে কাজ করছেন, আপনি PrintWriter.checkError()চেষ্টা করার পরে ব্যবহার করা উচিত out.close()। এটি সত্যই দলিল করা উচিত ছিল।
এভেজেনি সার্জিভ

আমরা যদি ক্লোজিং সম্পর্কে সুপার বিড়াল হতে যাচ্ছি, সেগুলির প্রতিটি XX.close() নিজের চেষ্টা / ধরা উচিত, তাই না? উদাহরণস্বরূপ, out.close()একটি ব্যতিক্রম ছুঁড়ে ফেলতে পারে, সেই ক্ষেত্রে bw.close()এবং fw.close()কখনই ডাকা হত না এবং fwএটিই বন্ধ করা সবচেয়ে গুরুত্বপূর্ণ।
কিপ

13

জাভা-7 এ এটি এ জাতীয় ধরণেরও করা যেতে পারে:

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

// ---------------------

Path filePath = Paths.get("someFile.txt");
if (!Files.exists(filePath)) {
    Files.createFile(filePath);
}
Files.write(filePath, "Text to be added".getBytes(), StandardOpenOption.APPEND);

2
প্রয়োজনীয় আমদানিগুলি কী কী? এই জিনিসগুলি কোন গ্রন্থাগার ব্যবহার করে?
চেতন ভাসিন

9

জাভা 7+

আমার নম্র মতে যেহেতু আমি সরল জাভার ভক্ত, তাই আমি এমন কিছু পরামর্শ দেব যা এটি পূর্বোক্ত উত্তরগুলির সংমিশ্রণ। পার্টির জন্য হয়তো আমি দেরি করেছি। কোডটি এখানে:

 String sampleText = "test" +  System.getProperty("line.separator");
 Files.write(Paths.get(filePath), sampleText.getBytes(StandardCharsets.UTF_8), 
 StandardOpenOption.CREATE, StandardOpenOption.APPEND);

যদি ফাইলটি বিদ্যমান না থাকে তবে এটি তৈরি করে এবং যদি ইতিমধ্যে বিদ্যমান থাকে তবে এটি বিদ্যমান ফাইলটিতে নমুনা পাঠকে যুক্ত করে। এটি ব্যবহার করে, আপনার ক্লাসপথে অপ্রয়োজনীয় লিবিস যোগ করা থেকে বাঁচায়।


8

কোডের এক লাইনে এটি করা যায়। আশাকরি এটা সাহায্য করবে :)

Files.write(Paths.get(fileName), msg.getBytes(), StandardOpenOption.APPEND);

1
এটি যথেষ্ট নাও হতে পারে :) এর চেয়ে ভাল সংস্করণ হ'ল ফাইল.উইরাইট (পাথস.জেট (ফাইলের নাম)), পি।
evg345

6

Java.nio ব্যবহার করে। Java.nio.file সহ ফাইলগুলিStandardOpenOption

    PrintWriter out = null;
    BufferedWriter bufWriter;

    try{
        bufWriter =
            Files.newBufferedWriter(
                Paths.get("log.txt"),
                Charset.forName("UTF8"),
                StandardOpenOption.WRITE, 
                StandardOpenOption.APPEND,
                StandardOpenOption.CREATE);
        out = new PrintWriter(bufWriter, true);
    }catch(IOException e){
        //Oh, no! Failed to create PrintWriter
    }

    //After successful creation of PrintWriter
    out.println("Text to be appended");

    //After done writing, remember to close!
    out.close();

এটি এমন একটি BufferedWriterফাইল তৈরি করে যা StandardOpenOptionপরামিতিগুলি গ্রহণ করে এবং PrintWriterফলস্বরূপ একটি স্বয়ংক্রিয়ভাবে ফ্লাশ করছে BufferedWriterPrintWriterএরprintln() পদ্ধতিটি, তারপরে ফাইলটিতে লিখতে বলা যেতে পারে।

এই StandardOpenOptionকোডটিতে ব্যবহৃত প্যারামিটারগুলি: লেখার জন্য ফাইলটি খোলে, কেবলমাত্র ফাইলটিতে সংযোজন করা হয় এবং ফাইলটি উপস্থিত না থাকলে তৈরি করে।

Paths.get("path here")সঙ্গে প্রতিস্থাপন করা যেতে পারে new File("path here").toPath()। এবং Charset.forName("charset name")পছন্দসই স্থান পরিবর্তন করতে পরিবর্তন করা যেতে পারে Charset


5

আমি কেবল ছোট বিবরণ যুক্ত করছি:

    new FileWriter("outfilename", true)

২ য় প্যারামিটার (সত্য) অ্যাপেন্ডেবল ( http://docs.oracle.com/javase/7/docs/api/java/lang/Appendable.html ) নামে পরিচিত একটি বৈশিষ্ট্য (বা, ইন্টারফেস )। নির্দিষ্ট ফাইল / স্ট্রিমের শেষে কিছু সামগ্রী যুক্ত করতে সক্ষম হওয়ার জন্য এটি দায়বদ্ধ। এই ইন্টারফেসটি জাভা 1.5 থেকে কার্যকর করা হয়েছে। এই ইন্টারফেসের সাথে প্রতিটি অবজেক্ট (অর্থাত্ বাফারড্রাইটার, চারআরাইরাইটার, চারবার্ফার, ফাইল রাইটার, ফিল্টার রাইটার, লগস্ট্রিম, আউটপুট স্ট্রিম রাইটার, পাইপড্রাইটার, প্রিন্টস্ট্রিম, মুদ্রণ লেখক, স্ট্রিংব্ফার, স্ট্রিংবিল্ডার, স্ট্রিং রাইটার, রাইটার ) সামগ্রী যুক্ত করার জন্য ব্যবহার করা যেতে পারে

অন্য কথায়, আপনি আপনার জিজেপড ফাইলটিতে কিছু সামগ্রী বা কিছু HTTP প্রক্রিয়া যুক্ত করতে পারেন


4

নমুনা, পেয়ারা ব্যবহার করে:

File to = new File("C:/test/test.csv");

for (int i = 0; i < 42; i++) {
    CharSequence from = "some string" + i + "\n";
    Files.append(from, to, Charsets.UTF_8);
}

13
এটি ভয়ঙ্কর পরামর্শ is আপনি একবারের পরিবর্তে 42 বার ফাইলটিতে একটি স্ট্রিম খুলুন।
xehpuk

3
@ এক্সেহপুক ভাল, এটি নির্ভর করে। 42 এখনও ঠিক আছে, যদি কোডটি আরও বেশি পাঠযোগ্য হয়। 42k গ্রহণযোগ্য হবে না।
dantuch

4

বাফারফাইলিটার.অ্যাপেন্ড দিয়ে চেষ্টা করুন, এটি আমার সাথে কাজ করে।

FileWriter fileWriter;
try {
    fileWriter = new FileWriter(file,true);
    BufferedWriter bufferFileWriter = new BufferedWriter(fileWriter);
    bufferFileWriter.append(obj.toJSONString());
    bufferFileWriter.newLine();
    bufferFileWriter.close();
} catch (IOException ex) {
    Logger.getLogger(JsonTest.class.getName()).log(Level.SEVERE, null, ex);
}

আপত্তি.টোজেএসএন স্ট্রিং () এখানে কী?
ভাস্কারা আরানী

@ ভাস্কারাআরানী এটি কেবল একটি স্ট্রিং, তিনি একটি স্ট্রিংতে রূপান্তরিত একটি জেএসওএন বস্তুর উদাহরণ রেখেছিলেন তবে ধারণা যে এটি কোনও স্ট্রিং হতে পারে।
ঘেরবি হিচাম

3
    String str;
    String path = "C:/Users/...the path..../iin.txt"; // you can input also..i created this way :P

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter pw = new PrintWriter(new FileWriter(path, true));

    try 
    {
       while(true)
        {
            System.out.println("Enter the text : ");
            str = br.readLine();
            if(str.equalsIgnoreCase("exit"))
                break;
            else
                pw.println(str);
        }
    } 
    catch (Exception e) 
    {
        //oh noes!
    }
    finally
    {
        pw.close();         
    }

এটি আপনি যা করতে চান তা করবে ...


3

রিসোর্স-ব্যবহার করে ব্যবহার করা আরও ভাল তবে সেই প্রাক-জাভা 7 অবশেষে ব্যবসায়

static void appendStringToFile(Path file, String s) throws IOException  {
    try (BufferedWriter out = Files.newBufferedWriter(file, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
        out.append(s);
        out.newLine();
    }
}

3

আমরা যদি জাভা 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();
}

একটি সতর্কতামূলক: বাফারড্রাইটার ব্যবহার করার সময় write(String string)যদি প্রতিটি স্ট্রিংয়ের পরে একটি নতুন লাইন প্রত্যাশা করে, newLine()বলা উচিত
yongtw123

3
FileOutputStream fos = new FileOutputStream("File_Name", true);
fos.write(data);

সত্য বিদ্যমান ফাইলটিতে ডেটা সংযোজন করতে দেয়। আমরা যদি লিখব

FileOutputStream fos = new FileOutputStream("File_Name");

এটি বিদ্যমান ফাইলটি ওভাররাইট করবে। সুতরাং প্রথম পদ্ধতির জন্য যান।


3
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Writer {


    public static void main(String args[]){
        doWrite("output.txt","Content to be appended to file");
    }

    public static void doWrite(String filePath,String contentToBeAppended){

       try(
            FileWriter fw = new FileWriter(filePath, true);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter out = new PrintWriter(bw)
          )
          {
            out.println(contentToBeAppended);
          }  
        catch( IOException e ){
        // File writing/opening failed at some stage.
        }

    }

}

উপরেরটি এই লিঙ্কটিতে উপস্থাপিত সমাধানের একটি দ্রুত উদাহরণ বাস্তবায়ন । সুতরাং আপনি কোডটি অনুলিপি করে পরিচালনা করতে পারেন এবং এটি কীভাবে কাজ করে তা তাত্ক্ষণিকভাবে দেখতে পারেন, আউটপুট.আউট ফাইলটি Writer.java ফাইলের মতো একই ডিরেক্টরিতে রয়েছে
ডেভিড চার্লস

2
FileOutputStream stream = new FileOutputStream(path, true);
try {

    stream.write(

        string.getBytes("UTF-8") // Choose your encoding.

    );

} finally {
    stream.close();
}

তারপরে কোথাও উজানের দিকে আইওএক্সেপশন ধরুন।


2

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

আপনারা মনে রাখতে পারেন যে আপনি ছেলেরা সক্রিয় থ্রেডগুলিতে কল করছেন যা আপনি অবিচ্ছিন্নভাবে কল করছেন না এবং যেহেতু এটি সঠিকভাবে সম্পন্ন করার জন্য এটি সম্ভবত 5 থেকে 10 পৃষ্ঠাগুলির পক্ষে ভাল। আপনার প্রকল্পে কেন বেশি সময় ব্যয় করবেন না এবং ইতিমধ্যে লিখিত কিছু লিখতে ভুলে যাবেন না। সঠিকভাবে

    //Adding a static modifier would make this accessible anywhere in your app

    public Logger getLogger()
    {
       return java.util.logging.Logger.getLogger("MyLogFileName");
    }
    //call the method anywhere and append what you want to log 
    //Logger class will take care of putting timestamps for you
    //plus the are ansychronously done so more of the 
    //processing power will go into your application

    //from inside a function body in the same class ...{...

    getLogger().log(Level.INFO,"the text you want to append");

    ...}...
    /*********log file resides in server root log files********/

তিনটি কোডের দুটি লাইনের সত্যিকার অর্থে তৃতীয়টি পাঠ্যকে সংযুক্ত করে। : P: P


2

গ্রন্থাগার

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

কোড

public void append()
{
    try
    {
        String path = "D:/sample.txt";

        File file = new File(path);

        FileWriter fileWriter = new FileWriter(file,true);

        BufferedWriter bufferFileWriter  = new BufferedWriter(fileWriter);

        fileWriter.append("Sample text in the file to append");

        bufferFileWriter.close();

        System.out.println("User Registration Completed");

    }catch(Exception ex)
    {
        System.out.println(ex);
    }
}

2

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

JFileChooser c= new JFileChooser();
c.showOpenDialog(c);
File write_file = c.getSelectedFile();
String Content = "Writing into file"; //what u would like to append to the file



try 
{
    RandomAccessFile raf = new RandomAccessFile(write_file, "rw");
    long length = raf.length();
    //System.out.println(length);
    raf.setLength(length + 1); //+ (integer value) for spacing
    raf.seek(raf.length());
    raf.writeBytes(Content);
    raf.close();
} 
catch (Exception e) {
    //any exception handling method of ur choice
}


1

নিম্নলিখিত পদ্ধতিটি আপনাকে কিছু ফাইলে পাঠ্য সংযোজন করতে দেয়:

private void appendToFile(String filePath, String text)
{
    PrintWriter fileWriter = null;

    try
    {
        fileWriter = new PrintWriter(new BufferedWriter(new FileWriter(
                filePath, true)));

        fileWriter.println(text);
    } catch (IOException ioException)
    {
        ioException.printStackTrace();
    } finally
    {
        if (fileWriter != null)
        {
            fileWriter.close();
        }
    }
}

বিকল্পভাবে ব্যবহার FileUtils:

public static void appendToFile(String filePath, String text) throws IOException
{
    File file = new File(filePath);

    if(!file.exists())
    {
        file.createNewFile();
    }

    String fileContents = FileUtils.readFileToString(file);

    if(file.length() != 0)
    {
        fileContents = fileContents.concat(System.lineSeparator());
    }

    fileContents = fileContents.concat(text);

    FileUtils.writeStringToFile(file, fileContents);
}

এটি দক্ষ নয় তবে সূক্ষ্মভাবে কাজ করে। লাইন ব্রেকগুলি সঠিকভাবে পরিচালনা করা হয় এবং যদি একটি বিদ্যমান না থাকে তবে একটি নতুন ফাইল তৈরি করা হয়।



1

আপনি যদি বিশেষ লাইনগুলিতে কিছু পাঠ্য যুক্ত করতে চান তবে আপনি প্রথমে পুরো ফাইলটি পড়তে পারেন, যেখানে খুশি পাঠ্যটি সংযোজন করতে পারেন এবং তারপরে নীচের কোডের মতো সমস্ত কিছু ওভাররাইট করতে পারেন:

public static void addDatatoFile(String data1, String data2){


    String fullPath = "/home/user/dir/file.csv";

    File dir = new File(fullPath);
    List<String> l = new LinkedList<String>();

    try (BufferedReader br = new BufferedReader(new FileReader(dir))) {
        String line;
        int count = 0;

        while ((line = br.readLine()) != null) {
            if(count == 1){
                //add data at the end of second line                    
                line += data1;
            }else if(count == 2){
                //add other data at the end of third line
                line += data2;
            }
            l.add(line);
            count++;
        }
        br.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }       
    createFileFromList(l, dir);
}

public static void createFileFromList(List<String> list, File f){

    PrintWriter writer;
    try {
        writer = new PrintWriter(f, "UTF-8");
        for (String d : list) {
            writer.println(d.toString());
        }
        writer.close();             
    } catch (FileNotFoundException | UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

0

আমার উত্তর:

JFileChooser chooser= new JFileChooser();
chooser.showOpenDialog(chooser);
File file = chooser.getSelectedFile();
String Content = "What you want to append to file";

try 
{
    RandomAccessFile random = new RandomAccessFile(file, "rw");
    long length = random.length();
    random.setLength(length + 1);
    random.seek(random.length());
    random.writeBytes(Content);
    random.close();
} 
catch (Exception exception) {
    //exception handling
}

0
/**********************************************************************
 * it will write content to a specified  file
 * 
 * @param keyString
 * @throws IOException
 *********************************************************************/
public static void writeToFile(String keyString,String textFilePAth) throws IOException {
    // For output to file
    File a = new File(textFilePAth);

    if (!a.exists()) {
        a.createNewFile();
    }
    FileWriter fw = new FileWriter(a.getAbsoluteFile(), true);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.append(keyString);
    bw.newLine();
    bw.close();
}// end of writeToFile()

-1

আপনি ফাইলটিতে থাকা বিষয়বস্তু সংযোজন করতে ফালং কোড ব্যবহার করতে পারেন:

 String fileName="/home/shriram/Desktop/Images/"+"test.txt";
  FileWriter fw=new FileWriter(fileName,true);    
  fw.write("here will be you content to insert or append in file");    
  fw.close(); 
  FileWriter fw1=new FileWriter(fileName,true);    
 fw1.write("another content will be here to be append in the same file");    
 fw1.close(); 

-1

1.7 পদ্ধতি:

void appendToFile(String filePath, String content) throws IOException{

    Path path = Paths.get(filePath);

    try (BufferedWriter writer = 
            Files.newBufferedWriter(path, 
                    StandardOpenOption.APPEND)) {
        writer.newLine();
        writer.append(content);
    }

    /*
    //Alternative:
    try (BufferedWriter bWriter = 
            Files.newBufferedWriter(path, 
                    StandardOpenOption.WRITE, StandardOpenOption.APPEND);
            PrintWriter pWriter = new PrintWriter(bWriter)
            ) {
        pWriter.println();//to have println() style instead of newLine();   
        pWriter.append(content);//Also, bWriter.append(content);
    }*/
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.