আমি কীভাবে জাভা ব্যবহার করে কোনও স্ট্রিং একটি পাঠ্য ফাইলে সংরক্ষণ করব?


698

জাভাতে, আমার কাছে স্ট্রিং ভেরিয়েবলের একটি পাঠ্য ক্ষেত্র থেকে "পাঠ্য" নামক পাঠ্য রয়েছে।

আমি কীভাবে কোনও ফাইলের "পাঠ্য" ভেরিয়েবলের বিষয়বস্তু সংরক্ষণ করতে পারি?

উত্তর:


727

আপনি যদি কোনও বাইনারি ডেটার পরিবর্তে কেবল পাঠ্য আউটপুট করে থাকেন তবে নিম্নলিখিতগুলি কাজ করবে:

PrintWriter out = new PrintWriter("filename.txt");

তারপরে, আপনার স্ট্রিংটি এতে লিখুন, ঠিক যেমন আপনি কোনও আউটপুট স্ট্রিমের মতো করে:

out.println(text);

আপনার আগের মতোই ব্যতিক্রম হ্যান্ডলিংয়ের প্রয়োজন হবে। আপনার out.close()লেখা শেষ হয়ে গেলে অবশ্যই কল করবেন call

আপনি যদি জাভা 7 বা তার পরে ব্যবহার করছেন, আপনি " রিসোর্স-এর সাথে চেষ্টা করুন" ব্যবহার করতে পারেন যা আপনার PrintStreamসাথে কাজ শেষ হলে এটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে (যেমন ব্লকটি প্রস্থান করুন):

try (PrintWriter out = new PrintWriter("filename.txt")) {
    out.println(text);
}

আপনি এখনও স্পষ্টভাবে java.io.FileNotFoundExceptionআগের মত নিক্ষেপ করতে হবে ।


4
@ জাস্টিন, আপনি যে কোনও জায়গায় ফাইলটি সংরক্ষণ করতে ফাইলআউটপুটস্ট্রিম কনস্ট্রাক্টরের কাছে একটি নিখুঁত পথ (যেমন "/tmp/filename.txt") পার করতে পারেন
জোনিক

7
বিটিডব্লিউ, প্রিন্টস্ট্রিম 1.5 এর পরে সুবিধাযুক্ত কনস্ট্রাক্টরগুলি ব্যবহার করে এটি সরল করা যেতে পারে। এটি যথেষ্ট হবে: মুদ্রণপ্রবাহ আউট = নতুন মুদ্রণপ্রবাহ ("filename.txt");
জোনিক

10
কিছুটা হলেও এই ফাইলটি বন্ধ করা দরকার ...? codecodex.com/wiki/ASCII_file_save#Java
JStrahl

2
আপনি চেষ্টা করতে চান}} ক্যাচ () {} অবশেষে {}, যেখানে শেষ পর্যন্ত {} আপনি ফাইলটি বন্ধ না করে বন্ধ করে দিন।
বেনাস

23
জাভা 8 এ আপনি চেষ্টা করতে পারেন (মুদ্রণপ্রবাহ ps = নতুন মুদ্রণপ্রবাহ ("ফাইলের নাম"))। PS.println (আউট);
you এটি

245

অ্যাপাচি কমন্স আইওতে এটি করার জন্য কয়েকটি দুর্দান্ত পদ্ধতি রয়েছে, বিশেষত ফাইল ইউটিলেলে নিম্নলিখিত পদ্ধতি রয়েছে:

static void writeStringToFile(File file, String data) 

যা আপনাকে একটি পদ্ধতিতে কল করে কোনও ফাইলে লেখার অনুমতি দেয়:

FileUtils.writeStringToFile(new File("test.txt"), "Hello File");

আপনি ফাইলটির জন্য এনকোডিংও নির্দিষ্ট করে বিবেচনা করতে পারেন।


10
কেবলমাত্র একটি ছোট্ট সংশোধন, দ্বিতীয় খণ্ডটি পড়তে হবে: ফাইলUtils.writeStringToFile (নতুন ফাইল ("test.txt"), "হ্যালো ফাইল");
pm_labs


10
ফাংশনটি এখন অবহিত করা হয়েছে, আপনার ডিফল্ট চরসেটটি যুক্ত করা উচিত ->FileUtils.writeStringToFile(new File("test.txt"), "Hello File", forName("UTF-8"));
পল ফোর্যানেল

97

কটাক্ষপাত জাভা ফাইল এপিআই

একটি দ্রুত উদাহরণ:

try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
    out.print(text);
}

@ এক্সপি 1 আমি জানি, এটি একটি দুর্দান্ত উন্নতি। আমি জাভা in এ এর ​​জন্য লম্বোক ব্যবহার করেছি: শুধু যাও @Cleanup new FileOutputStream(...)এবং আপনি শেষ করেছেন।
উয়র্ন

6
কল করতে ভুলবেন না.ফ্লুশ (); তারপরে out.close ();
অ্যালেক্স বার্থ

@ অ্যালেক্সবায়ার্থকে কেন করা উচিত?
অ্যান্ড্রু টবিলকো 11:58

1
বড় ফাইলগুলি ব্যাকগ্রাউন্ডে রেকর্ড করা হয় (অন্য থ্রেড) এবং রেকর্ড করতে সময় নেয়। কল করা ফ্লাশ () নিশ্চিত করে যে অপারেশনটি সিঙ্ক্রোনাইজ করে পরবর্তী লাইনে সবকিছুই লেখা হয়েছে। তবে এটি alচ্ছিক তবে লগ হিসাবে বড় ফাইল হ্যান্ডেল করা ভাল অভ্যাস।
অ্যালেক্স বাইথ

1
নোট করুন যে আউটক্লোজ () ইতিমধ্যে স্ট্রিমটিকে ফ্লাশ করেছে, যার অর্থ এটি কল করা দরকার নেই f ফ্লাশ ()।
hjk321

90

জাভা 7 এ আপনি এটি করতে পারেন:

String content = "Hello File!";
String path = "C:/a.txt";
Files.write( Paths.get(path), content.getBytes());

এখানে আরও তথ্য রয়েছে: http://www.drdobbs.com/jvm/java-se-7-new-file-io/231600403


3
পরে কেউ যদি অবাক হয়ে যায় তবে এনকোডিংটি প্ল্যাটফর্মের মান হবে।
হাকন লাটভিট

5
content.getBytes(StandardCharsets.UTF_8)এনকোডিং স্পষ্টভাবে সংজ্ঞায়িত করতে ব্যবহার করা যেতে পারে।
29

1
নোট করুন যে স্ট্যান্ডার্ড ওপেন অপশন.সিআরএইটি ডিফল্ট এক নয় স্ট্যান্ডার্ড ওপেন অপশন। ক্রেইট এবং স্ট্যান্ডার্ড ওপেন অপশন.আরআরসিএসিএক্সটাইটিং ডিফল্ট। ডিফল্টটি ব্যবহার করতে কেবল তৃতীয় প্যারামিটারটি সরিয়ে ফেলুন।
টিনুস টেট

টিনুস টেটের মন্তব্যটি দেখুন! এই উদাহরণটি সম্পাদনা করার প্রক্রিয়াটি কী? আমি আশ্চর্য হয়েছি যে কত হাজার মানুষ এই উদাহরণটি গ্রহণ করেছেন কেবলমাত্র তা খুঁজে পাওয়ার জন্য যখন তারা একটি সংক্ষিপ্ত স্ট্রিং সহ কোনও ফাইল ওভাররাইট করে তখন তাদের অপ্রত্যাশিত ফলাফল হয়। টিনাস ইঙ্গিত হিসাবে, একটি সংক্ষিপ্ত স্ট্রিং দিয়ে ওভাররাইট করার সময় বিদ্যমান ফাইলটি ছাঁটাই না করার জন্য যদি আপনি পুরোপুরি বুঝতে না পারেন এবং আসল কারণ না পান তবে TRUNCATE_EXISTING গুরুত্বপূর্ণ।
জেচ

1
জাভা 11 এ আপনি কেবল দ্বিতীয় প্যারামিটার হিসাবে একটি স্ট্রিং রাখতে পারেন! হুররে!
ডেনিস গ্লট

78

আমার প্রকল্পে ঠিক সেরকমই কিছু করেছেন। ফাইল রাইটার ব্যবহার আপনার কাজের কিছু অংশ সহজতর করবে। এবং এখানে আপনি সুন্দর টিউটোরিয়াল খুঁজে পেতে পারেন ।

BufferedWriter writer = null;
try
{
    writer = new BufferedWriter( new FileWriter( yourfilename));
    writer.write( yourstring);

}
catch ( IOException e)
{
}
finally
{
    try
    {
        if ( writer != null)
        writer.close( );
    }
    catch ( IOException e)
    {
    }
}

4
সমস্ত চেষ্টা / ধরা এবং সরল করে তোলা আমি এটি কেবল একটি লাইনে করতে সক্ষম হয়েছি: (নতুন বাফারড্রাইটার (নতুন ফাইল রাইটার (ফাইল নাম))) লিখুন (স্ট্র);
আর্টেম বার্গার

6
সুতরাং, আপনার সহজ এবং দুর্দান্ত সমাধানটি দেখান। কীভাবে এটি আরও ভাল উপায়ে করা যায় তা শিখে আমি আনন্দিত হব।
আর্টেম বার্গার

4
ট্রলগুলি উপেক্ষা করুন ... তারা নিজের সমাধান না দিয়ে সর্বদা সমালোচনা করে। আমার নিজের কোড লিখতে / অতিরিক্ত গ্রন্থাগার ডাউনলোড করা এবং নির্ভরতা প্রবর্তন করা থেকে আমাকে বাঁচানোর জন্য ধন্যবাদ ...
নিকবি

1
দেখে মনে হচ্ছে যে এটি .close()নিক্ষেপ করে না (অন্তত জাভা 7 এ?), শেষ ট্রাইচ্যাচ সম্ভবত অনর্থক?
কোস

16
এই জাতীয় ব্যতিক্রমগুলি গিলে ফেলা আপনার জন্য জীবনকে কঠিন করে তুলবে যখন ব্যতিক্রমগুলি সত্যই ঘটে। খুব কমপক্ষে আপনার এগুলি পুনর্বিবেচনা করা উচিত:throw new RuntimeException(e);
রজার কিস

65

অ্যাপাচি কমন্স আইওFileUtils.writeStringToFile() থেকে ব্যবহার করুন । এই নির্দিষ্ট চাকা পুনরায় উদ্ভাবনের প্রয়োজন নেই।


20
আমি আরও দ্বিমত করতে পারি না। এই লাইব্রেরিগুলি রয়েছে তাই আমরা এত সহজ সমাধানে সূক্ষ্ম বাগগুলি প্রবর্তন করি না।
স্কাফম্যান

3
না, অবশ্যই না। আমি কেবলমাত্র একমত নই যে আপনার সমাধানটি প্রথম জিনিসটি না হতে পারে আমি প্রথম দিকে যাকে প্রথমে জাভা প্রোগ্রামার হিসাবে ফেলেছিলাম throw আপনি পরামর্শ দিচ্ছেন না যে আপনি এ জাতীয় জিনিসটি কখনও লেখেন নি, আপনি?
ডাফাইমো

8
আমার কাছে আছে, হ্যাঁ, তবে এটির আগে কমন্স-আইও খুঁজে পেয়েছি। এটি সন্ধানের পর থেকে আমি কখনও এক ধরণের প্রকল্পে হাতে হাতে এই ধরণের জিনিসটি লিখিনি। আমি যদি প্রথম দিন থেকে এটি সম্পর্কে জানতাম তবে আমি এটি প্রথম দিন থেকেই ব্যবহার করতাম।
স্কাফম্যান

5
ঠিক, তবে আপনি একজন অভিজ্ঞ বিকাশকারী। আপনার বায়ো আপনার একটি জেবিওএস / স্প্রিং ব্যবহারকারী বলেছেন, তবে অবশ্যই আপনি আপনার প্রথম "হ্যালো, ওয়ার্ল্ড" প্রয়াসে একটিও হতে পারছেন না। আমি গ্রন্থাগারগুলির সঠিক ব্যবহারের সাথে একমত নই। আমি বলছি যে লোকেরা প্রথমবারের জন্য কোনও ভাষা চেষ্টা করছে তাদের এটি নীচের অংশে জানার চেষ্টা করা উচিত, এমনকি যদি এমন কিছু করার চেষ্টা করা হয় যা তারা অভিজ্ঞ হওয়ার পরে আরও ভাল করে জানবে তবে পরে তা বাতিল করে দেবে।
duffymo

2
আমি কমোন ছাড়াই এটি বাস্তবায়ন করেছি এবং স্পষ্ট ব্যতিক্রম ছাড়াই কম পেয়েছি। আমি তখন কমন্স ব্যবহার করে এটি বাস্তবায়ন করেছি এবং এটি আমাকে ঠিক কী ভুল হয়েছিল তা বলেছিল। গল্পটির নৈতিকতা: যদি না করতে হয় তবে অন্ধকার যুগে কেন বাঁচবেন?
নিরব নট

22

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

import java.io.*;

public class Main {

    public static void main(String[] args) {

        try {
            String str = "SomeMoreTextIsHere";
            File newTextFile = new File("C:/thetextfile.txt");

            FileWriter fw = new FileWriter(newTextFile);
            fw.write(str);
            fw.close();

        } catch (IOException iox) {
            //do stuff with exception
            iox.printStackTrace();
        }
    }
}

2
এটি কোনও ব্যতিক্রমের ক্ষেত্রে ফাইলটি বন্ধ করে দেয় না।
টম হাটিন -

1
@ জানুস ট্রেলসন: যদি প্রত্যাখ্যান করা হয়, তবে সম্পদ-সংক্রান্ত বিবৃতি দিয়ে চেষ্টা করুন
ট্র্যাশগোড

21

ইন জাভা 11java.nio.file.Files বর্গ দুটি নতুন উপযোগ পদ্ধতি দ্বারা বাড়ানো হয়েছে একটি ফাইলে একটি স্ট্রিং লিখতে। প্রথম পদ্ধতিটি ( এখানে জাভাক ডক দেখুন ) চরসেট ইউটিএফ -8 ডিফল্ট হিসাবে ব্যবহার করে :

Files.writeString(Path.of("my", "path"), "My String");

এবং দ্বিতীয় পদ্ধতি ( এখানে জাভাক ডক দেখুন ) একটি পৃথক চরসেট নির্দিষ্ট করতে দেয়:

Files.writeString(Path.of("my", "path"), "My String", StandardCharset.ISO_8859_1);

উভয় পদ্ধতিতে ফাইল হ্যান্ডলিংয়ের বিকল্পগুলি সেট করার জন্য একটি alচ্ছিক ভারার্গস পরামিতি রয়েছে (জাভাডকটি এখানে দেখুন )। নিম্নলিখিত উদাহরণটি একটি অ-বিদ্যমান ফাইল তৈরি করবে বা একটি বিদ্যমান স্ট্রিং যুক্ত করবে:

Files.writeString(Path.of("my", "path"), "String to append", StandardOpenOption.CREATE, StandardOpenOption.APPEND);

13

এই ধরণের ক্রিয়াকলাপের জন্য আমি যখনই সম্ভব লাইব্রেরিতে নির্ভর করতে পছন্দ করি। এটি আমাকে দুর্ঘটনাক্রমে একটি গুরুত্বপূর্ণ পদক্ষেপ বাদ দেওয়ার সম্ভাবনা কম করে তোলে (যেমন ভুল উলফস্নাইপস উপরে তৈরি)। কিছু লাইব্রেরি উপরে প্রস্তাবিত, তবে এই ধরণের জিনিসের জন্য আমার প্রিয় গুগল পেয়ারা । পেয়ারাতে ফাইল নামে একটি শ্রেণি রয়েছে যা এই কাজের জন্য দুর্দান্তভাবে কাজ করে:

// This is where the file goes.
File destination = new File("file.txt");
// This line isn't needed, but is really useful 
// if you're a beginner and don't know where your file is going to end up.
System.out.println(destination.getAbsolutePath());
try {
    Files.write(text, destination, Charset.forName("UTF-8"));
} catch (IOException e) {
    // Useful error handling here
}

2
আপনি যদি পেয়ারা ব্যবহার করেন তবে তাও রয়েছে Charsets.UTF-8
ফ্লোরিয়ান

2
@ ফ্লোরিয়ান: এটি Charsets.UTF_8আসলে
টিম বাথ

মূল ফোল্ডারটি অবশ্যই উপস্থিত থাকবে। উদাহরণ: গন্তব্য.মেকিডার্স ()।
অ্যালিকেলিন-কিলাকা

2
ফাইলস রাইট (চারসিকোয়েন্স, ফাইল টু, চারসেট চারসেট) পেয়ারা ২ 26.০ এ অবমুক্ত করা হয়েছে।
ডোনাল্ড হাঁস

: অবচিত Files.write করার আধুনিক পেয়ারা বিকল্প Files.asCharSink(file, charset).write(text)
Vadzim

12

অ্যাপাচি কমন্স আইও এপিআই ব্যবহার করুন। ইহা সাধারণ

হিসাবে API ব্যবহার করুন

 FileUtils.writeStringToFile(new File("FileNameToWrite.txt"), "stringToWrite");

মাভেন নির্ভরতা

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

12

যদি আপনার একক স্ট্রিংয়ের উপর ভিত্তি করে পাঠ্য ফাইল তৈরি করতে হয়:

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

public class StringWriteSample {
    public static void main(String[] args) {
        String text = "This is text to be saved in file";

        try {
            Files.write(Paths.get("my-file.txt"), text.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ফাইলস রাইট (পথ, বাইট []) ইউটিএফ -8 এনকোডিং ব্যবহার করবে। স্ট্রিং.জেটবাইটস () ডিফল্ট প্ল্যাটফর্ম এনকোডিং ব্যবহার করে। সুতরাং এটি একটি সম্ভাব্য সমস্যা। স্ট্রিং.জেটবাইটস (স্ট্যান্ডার্ডচ্যারসেটস.উইফএফ_8) ব্যবহার করুন!
rmuller

11

এটি ব্যবহার করুন, এটি খুব পঠনযোগ্য:

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

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

এটি একটি বিদ্যমান উত্তরের একটি অনুলিপিও। : সি
জেমস.গরিস

2
দুঃখিত তবে আমি জাভা 8 আবিষ্কার করেনি, আমি এই লাইনটি ব্যবহার করি না। তবে একই প্রশ্নের অন্যান্য উত্তর থেকে এটি অনুলিপি নয়
রণ অ্যাডলার

10
import java.io.*;

private void stringToFile( String text, String fileName )
 {
 try
 {
    File file = new File( fileName );

    // if file doesnt exists, then create it 
    if ( ! file.exists( ) )
    {
        file.createNewFile( );
    }

    FileWriter fw = new FileWriter( file.getAbsoluteFile( ) );
    BufferedWriter bw = new BufferedWriter( fw );
    bw.write( text );
    bw.close( );
    //System.out.println("Done writing to " + fileName); //For testing 
 }
 catch( IOException e )
 {
 System.out.println("Error: " + e);
 e.printStackTrace( );
 }
} //End method stringToFile

আপনি এই পদ্ধতিটি আপনার ক্লাসে প্রবেশ করতে পারেন। আপনি যদি কোনও ক্লাসে একটি মেথড মেথড সহ এই পদ্ধতিটি ব্যবহার করে থাকেন তবে স্ট্যাটিক কী শব্দটি যুক্ত করে এই শ্রেণিটিকে স্থিতিতে পরিবর্তন করুন। যে কোনও উপায়ে আপনার java.io আমদানি করতে হবে * এটি অন্যথায় কাজ করার জন্য ফাইল, ফাইল রাইটার এবং বাফারড্রাইটার স্বীকৃত হবে না।


10

আপনি এটি করতে পারেন:

import java.io.*;
import java.util.*;

class WriteText
{
    public static void main(String[] args)
    {   
        try {
            String text = "Your sample content to save in a text file.";
            BufferedWriter out = new BufferedWriter(new FileWriter("sample.txt"));
            out.write(text);
            out.close();
        }
        catch (IOException e)
        {
            System.out.println("Exception ");       
        }

        return ;
    }
};

10

ব্যবহার Java 7:

public static void writeToFile(String text, String targetFilePath) throws IOException
{
    Path targetPath = Paths.get(targetFilePath);
    byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
    Files.write(targetPath, bytes, StandardOpenOption.CREATE);
}

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

ঠিক আছে, আপনি কীভাবে জানেন?
ওজব্লাস

কেবল Files.write(targetPath, bytes);তখন ফাইলটি ওভাররাইট করতে ব্যবহার করুন। এটি আশানুরূপ কাজ করবে।
বুলিউইআইপ্লাজা

8

Org.apache.commons.io.FileUtils ব্যবহার করে:

FileUtils.writeStringToFile(new File("log.txt"), "my string", Charset.defaultCharset());

6

আপনি যদি কেবলমাত্র একটি ব্লকের পাঠ্যকে ফাইলের দিকে চাপ দেওয়ার বিষয়ে চিন্তা করেন তবে এটি প্রতিবার এটি ওভাররাইট হয়ে যাবে।

JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
    FileOutputStream stream = null;
    PrintStream out = null;
    try {
        File file = chooser.getSelectedFile();
        stream = new FileOutputStream(file); 
        String text = "Your String goes here";
        out = new PrintStream(stream);
        out.print(text);                  //This will overwrite existing contents

    } catch (Exception ex) {
        //do something
    } finally {
        try {
            if(stream!=null) stream.close();
            if(out!=null) out.close();
        } catch (Exception ex) {
            //do something
        }
    }
}

এই উদাহরণটি ব্যবহারকারীকে ফাইল চয়নকারী ব্যবহার করে একটি ফাইল নির্বাচন করতে দেয়।


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

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

3

লেখক / আউটপুটস্ট্রিমটি শেষ অবধি বন্ধ করা আরও ভাল, যদি কিছু ঘটে থাকে তবে

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

1
আরও ভাল: চেষ্টা করুন-সহ-সংস্থানগুলি ব্যবহার করুন
জানুস ট্রয়লসেন

হ্যাঁ, @ জ্যানুস ট্রেলসন ঠিকই আছেন, আরও ভাল ব্যবহার করুন রিসোর্স-স্টেটমেন্ট স্টেটমেন্ট ডকস.অরাকল.com

2
private static void generateFile(String stringToWrite, String outputFile) {
try {       
    FileWriter writer = new FileWriter(outputFile);
    writer.append(stringToWrite);
    writer.flush();
    writer.close();
    log.debug("New File is generated ==>"+outputFile);
} catch (Exception exp) {
    log.error("Exception in generateFile ", exp);
}

}


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

বন্ধ () কখনও বলা হবে না। দয়া করে সঠিক উত্তর ত্রুটির ক্ষেত্রে হ্যান্ডলিং যুক্ত করে আপনার উত্তরটি উন্নত করুন।
বরিস ব্রডস্কি

0

আমি মনে করি সবচেয়ে ভাল উপায়টি ব্যবহার করা হচ্ছে Files.write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options):

String text = "content";
Path path = Paths.get("path", "to", "file");
Files.write(path, Arrays.asList(text));

জাভাডোক দেখুন :

একটি ফাইল পাঠ্য লাইন লিখুন। প্রতিটি লাইন একটি গৃহস্থালি ক্রম এবং সিস্টেম সম্পত্তি লাইন.সেস্পেটর দ্বারা নির্ধারিত হিসাবে প্ল্যাটফর্মের লাইন বিভাজক দ্বারা সমাপ্ত প্রতিটি লাইনের সাথে ক্রমে ফাইলটিতে লেখা হয়। অক্ষরগুলি নির্দিষ্ট অক্ষরেট ব্যবহার করে বাইটগুলিতে এনকোড করা হয়।

অপশন প্যারামিটার ফাইলটি কীভাবে তৈরি বা খোলার তা সুনির্দিষ্ট করে। যদি কোনও বিকল্প উপস্থিত না থাকে তবে এই পদ্ধতিটি এমনভাবে কাজ করে যা CREATE, TRUNCATE_EXISTING, এবং WRITE অপশন উপস্থিত রয়েছে। অন্য কথায়, এটি লেখার জন্য ফাইলটি খোলে, উপস্থিত না থাকলে ফাইল তৈরি করে, বা প্রাথমিকভাবে একটি নিয়মিত-ফাইলকে ০ আকারের আকারে ছাঁটাই করে দেয় পদ্ধতিটি নিশ্চিত করে যে সমস্ত লাইন লেখার সময় ফাইলটি বন্ধ হয়ে যায় ( অথবা আই / ও ত্রুটি বা অন্য রানটাইম ব্যতিক্রম নিক্ষেপ করা হয়)। যদি আই / ও ত্রুটি দেখা দেয় তবে ফাইলটি তৈরি বা কেটে যাওয়ার পরে, বা কিছু বাইট ফাইলে লেখার পরে এটি তা করতে পারে।

দয়া করে নোট করুন আমি দেখছি জাভা অন্তর্নির্মিত দিয়ে লোকেরা ইতিমধ্যে উত্তর দিয়েছে Files.write, তবে আমার উত্তরে কী বিশেষ উল্লেখ করা উচিত বলে মনে হয় না যে পদ্ধতিটির ওভারলোডেড সংস্করণ যা byte[]অ্যারের পরিবর্তে চারসেকেন্স (অর্থাত্ স্ট্রিং) এর একটি Iterable লাগে, সুতরাং এটির text.getBytes()প্রয়োজন হয় না thus যা আমি কিছুটা ক্লিনার বলে মনে করি।


0

আপনি যদি স্ট্রিং থেকে ক্যারেজ রিটার্নের অক্ষরগুলিকে একটি ফাইলে রাখতে চান তবে একটি কোড উদাহরণ:

    jLabel1 = new JLabel("Enter SQL Statements or SQL Commands:");
    orderButton = new JButton("Execute");
    textArea = new JTextArea();
    ...


    // String captured from JTextArea()
    orderButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            // When Execute button is pressed
            String tempQuery = textArea.getText();
            tempQuery = tempQuery.replaceAll("\n", "\r\n");
            try (PrintStream out = new PrintStream(new FileOutputStream("C:/Temp/tempQuery.sql"))) {
                out.print(tempQuery);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(tempQuery);
        }

    });

-1

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

যথাসম্ভব, স্ট্রিমগুলি (ইনপুটস্ট্রিম এবং আউটপুট স্ট্রিম) বাইনারি ডেটা স্থানান্তর করে, বিকাশকারী যখন কোনও স্ট্রিমে একটি স্ট্রিং লিখতে যায়, প্রথমে অবশ্যই এটি বাইটে রূপান্তর করতে হবে, বা অন্য কথায় এটি এনকোড করা উচিত।

public boolean writeStringToFile(File file, String string, Charset charset) {
    if (file == null) return false;
    if (string == null) return false;
    return writeBytesToFile(file, string.getBytes((charset == null) ? DEFAULT_CHARSET:charset));
}

public boolean writeBytesToFile(File file, byte[] data) {
    if (file == null) return false;
    if (data == null) return false;
    FileOutputStream fos;
    BufferedOutputStream bos;
    try {
        fos = new FileOutputStream(file);
        bos = new BufferedOutputStream(fos);
        bos.write(data, 0, data.length);
        bos.flush();
        bos.close();
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
        Logger.e("!!! IOException");
        return false;
    }
    return true;
}

1
সমস্ত খোলা সংস্থানগুলি বন্ধ করার এবং ব্যতিক্রমগুলির প্রস্তাব দেওয়ার জন্য দয়া করে যথাযথ ত্রুটিযুক্ত কেস যুক্ত করুন
বোরিস

আপনি যেমন পরামর্শ দিয়েছেন তেমন কোড হ্যান্ডলিং কেসগুলি ভাগ করে নিতে আপত্তি করবেন, ধন্যবাদ
牟家宏

-1

আপনি উদাহরণস্বরূপ টেক্সটএরিয়ার সমস্ত বিষয়বস্তু রাখার জন্য অ্যারেলিস্ট ব্যবহার করতে পারেন, এবং সেভকে কল করে প্যারামিটার হিসাবে পাঠাতে পারেন, লেখক যেমন স্ট্রিং লাইন লিখেছিলেন, তারপরে আমরা শেষে আমাদের অ্যারেলিস্ট লিখতে "লাইন" লাইনটি ব্যবহার করি আমরা টেক্সট ফাইলটিতে টেক্সটআরিয়া থাকব। যদি কিছু বোঝা না যায় তবে আমি দুঃখিত গুগল অনুবাদক এবং আমি যারা ইংরেজী বলতে পারি না।

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


private void SaveActionPerformed(java.awt.event.ActionEvent evt) {

    String NameFile = Name.getText();
    ArrayList< String > Text = new ArrayList< String >();

    Text.add(TextArea.getText());

    SaveFile(NameFile, Text);
}

public void SaveFile(String name, ArrayList< String> message) {

    path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt";

    File file1 = new File(path);

    try {

        if (!file1.exists()) {

            file1.createNewFile();
        }


        File[] files = file1.listFiles();


        FileWriter fw = new FileWriter(file1, true);

        BufferedWriter bw = new BufferedWriter(fw);

        for (int i = 0; i < message.size(); i++) {

            bw.write(message.get(i));
            bw.newLine();
        }

        bw.close();
        fw.close();

        FileReader fr = new FileReader(file1);

        BufferedReader br = new BufferedReader(fr);

        fw = new FileWriter(file1, true);

        bw = new BufferedWriter(fw);

        while (br.ready()) {

            String line = br.readLine();

            System.out.println(line);

            bw.write(line);
            bw.newLine();

        }
        br.close();
        fr.close();

    } catch (IOException ex) {
        ex.printStackTrace();
        JOptionPane.showMessageDialog(null, "Error in" + ex);     
    }   
}

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