मैं जावा का उपयोग करके एक स्ट्रिंग को टेक्स्ट फ़ाइल में कैसे सहेज सकता हूं?


699

जावा में, मेरे पास एक पाठ फ़ील्ड से एक स्ट्रिंग चर है जिसे "पाठ" कहा जाता है।

मैं "टेक्स्ट" चर की सामग्री को किसी फ़ाइल में कैसे सहेज सकता हूं?

जवाबों:


727

यदि आप किसी बाइनरी डेटा के बजाय केवल टेक्स्ट आउटपुट कर रहे हैं, तो निम्न कार्य करेगा:

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

फिर, अपने स्ट्रिंग को इसे लिखें, जैसे आप किसी भी आउटपुट स्ट्रीम में करेंगे:

out.println(text);

आपको हमेशा की तरह अपवाद से निपटने की आवश्यकता होगी। out.close()जब आप लिखना समाप्त कर लें, तो कॉल करना सुनिश्चित करें ।

यदि आप जावा 7 या उसके बाद का उपयोग कर रहे हैं, तो आप " ट्राय-विथ-रिसोर्स स्टेटमेंट " का उपयोग कर सकते हैं, जो आपके साथ PrintStreamहोने पर अपने आप बंद हो जाएगा (यानी ब्लॉक से बाहर निकलें) जैसे:

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

आपको java.io.FileNotFoundExceptionपहले की तरह स्पष्ट रूप से फेंकने की आवश्यकता होगी ।


4
@ जस्टिन, आप फ़ाइलओटूटपुटस्ट्रीम कंस्ट्रक्टर के लिए एक पूर्ण पथ (जैसे "/tmp/filename.txt") भी पास कर सकते हैं, फ़ाइल को कहीं भी सहेजने के लिए
जोनिक

7
Btw, यह सुविधा के निर्माण का उपयोग करके सरलीकृत किया जा सकता है PrintStream 1.5 के बाद से पड़ा है। यह पर्याप्त होगा: PrintStream बाहर = नया PrintStream ("filename.txt");
जोनिक

10
कुछ बिंदु पर हालांकि उस फ़ाइल को बंद करने की आवश्यकता है ...? codecodex.com/wiki/ASCII_file_save#Java
JStrahl

2
आप कोशिश करना चाहते हैं {} पकड़ () {} अंत {}, जहां अंत में {} आप फ़ाइल को बंद कर देते हैं यदि यह शून्य नहीं है।
बनारस

23
Java8 में आप कोशिश कर सकते हैं (PrintStream ps = new PrintStream ("filename")) {ps.println (out); } यह आप के लिए बंद संभाल लेंगे
एंटोन चिकिन

245

Apache Commons IO में ऐसा करने के लिए कुछ बेहतरीन तरीके हैं, विशेष रूप से FileUtils में निम्न विधि है:

static void writeStringToFile(File file, String data) 

जो आपको एक विधि कॉल में किसी फ़ाइल में पाठ लिखने की अनुमति देता है:

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

आप फ़ाइल के लिए एन्कोडिंग निर्दिष्ट करने पर भी विचार कर सकते हैं।


10
बस एक मामूली सुधार, दूसरा टुकड़ा पढ़ना चाहिए: FileUtils.writeStringToFile (नई फ़ाइल ("test.txt"), "हैलो फ़ाइल");
pm_labs

3
हम में से जो लोग अमरूद पसंद करते हैं, वे भी ऐसा कर सकते हैं
जोनीक

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);
}

@ XP1 मुझे पता है, यह एक महान सुधार है। मैंने इसके लिए जावा 6 में लोम्बोक का उपयोग किया है: बस जाओ @Cleanup new FileOutputStream(...)और तुम काम कर रहे हो।
Jorn

6
कॉल आउट करना न भूलें। फ्लश (); फिर बाहर। क्लोज़ ();
एलेक्स बर्थ

@AlexByrth वह क्यों चाहिए?
एंड्रयू टोबिल्को

1
बड़ी फ़ाइलों को पृष्ठभूमि (एक और धागा) में रिकॉर्ड किया जाता है और रिकॉर्ड करने के लिए समय लगता है। फ्लश () कॉलिंग सुनिश्चित करता है कि सबकुछ अगली पंक्ति पर लिखा गया है, ऑपरेशन को सिंक्रनाइज़ करना। लेकिन यह वैकल्पिक है , लेकिन अच्छा अभ्यास है यदि आप लॉग के रूप में बड़ी फ़ाइलों को संभालते हैं।
एलेक्स बर्थ

1
ध्यान दें कि out.close () पहले से ही स्ट्रीम को फ्लश करता है, जिसका अर्थ है कि कॉल आउट करना आवश्यक नहीं है ।flush ()।
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
यदि कोई बाद में सोचता है, तो एन्कोडिंग प्लेटफ़ॉर्म मानक होगा।
Haakon Løtveit

5
content.getBytes(StandardCharsets.UTF_8)एन्कोडिंग को स्पष्ट रूप से परिभाषित करने के लिए इस्तेमाल किया जा सकता है।
जॉन

1
ध्यान दें कि StandardOpenOption.CREATE डिफ़ॉल्ट नहीं है StandardOpenOption.CREATE और StandardOpenOption.TRUNCATE_EXISTING डिफ़ॉल्ट है। डिफ़ॉल्ट का उपयोग करने के लिए बस तीसरे पैरामीटर को हटा दें।
टीनस टेट

कृपया टीनस टेट की टिप्पणी देखें! इस उदाहरण को संपादित करने की प्रक्रिया क्या है? मुझे आश्चर्य है कि कितने लोगों ने इस उदाहरण को लिया है-केवल यह खोजने के लिए कि उनके पास अप्रत्याशित परिणाम हैं जब वे एक फ़ाइल को एक छोटी स्ट्रिंग के साथ ओवरराइट करते हैं। जब तक टिनस इंगित करता है, TRUNCATE_EXISTING तब तक महत्वपूर्ण है जब तक कि आप पूरी तरह से समझ न लें और एक छोटी स्ट्रिंग के साथ ओवरराइटिंग करने पर मौजूदा फ़ाइल को छोटा नहीं करना चाहते हैं।
jch

1
जावा 11 में आप बस एक दूसरे पैरामीटर के रूप में एक स्ट्रिंग डाल सकते हैं! हुर्रे!
डेनिस ग्लोट

78

बस मेरे प्रोजेक्ट में कुछ ऐसा ही हुआ। FileWriter का उपयोग करना आपकी नौकरी के भाग को सरल करेगा। और यहाँ आप अच्छा ट्यूटोरियल पा सकते हैं ।

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
सभी प्रयास / कैच को हटा दें और इसे सरल करें मैं इसे केवल एक लाइन में करने में सक्षम हूं: (नया बफ़रवरविटर (नया फ़ाइलवर्टर (फ़ाइल नाम)))। लेखन (str);
आर्टेम बार्गर

6
तो, अपना सरल और अच्छा समाधान दिखाएं। मुझे यह जानकर खुशी होगी कि इसे बेहतर तरीके से कैसे किया जाए।
आर्टेम बार्गर

4
ट्रोल्स को अनदेखा करें ... वे हमेशा अपने स्वयं के समाधान की पेशकश के बिना आलोचना करते हैं। मुझे अपना कोड लिखने से बचाने के लिए धन्यवाद / अतिरिक्त पुस्तकालय डाउनलोड करने और निर्भरता का परिचय देने के लिए ...
nikib3ro

1
ऐसा लगता है कि .close()फेंक नहीं है (कम से कम जावा 7 में?), शायद आखिरी कोशिश है बेमानी?
कोस

16
जब वास्तव में अपवाद होते हैं, तो ऐसे अपवादों को छोड़ना आपके लिए जीवन को कठिन बनाने वाला है। बहुत कम से कम आपको उन्हें फिर से उखाड़ फेंकना चाहिए:throw new RuntimeException(e);
रोजर किय्स

65

Apache Commons IOFileUtils.writeStringToFile() से उपयोग करें । इस विशेष पहिये को सुदृढ़ करने की आवश्यकता नहीं है।


20
मैं इससे ज्यादा असहमत नहीं हो सकता। ये पुस्तकालय हैं इसलिए हम इस तरह के एक सरल समाधान में सूक्ष्म कीड़े का परिचय नहीं देते हैं।
स्कफमैन 20

3
नहीं, जाहिर है नहीं। मैं केवल इस बात से असहमत हूं कि आपका समाधान पहली चीज नहीं हो सकती है जिसे मैं किसी ऐसे व्यक्ति पर फेंकूंगा जो एक जावा प्रोग्रामर है। आप सुझाव नहीं दे रहे हैं कि आपने कभी ऐसा नहीं लिखा है, क्या आप हैं?
duffymo

8
मेरे पास हाँ है, लेकिन इससे पहले कि मैं कॉमन्स-आईआईओ पाया। यह खोजने के बाद से, मैंने कभी भी उस तरह की चीज़ को हाथ से नहीं लिखा है, यहां तक ​​कि एक-एक श्रेणी की परियोजना में भी। अगर मुझे पहले दिन से इसके बारे में पता है, तो मैंने पहले दिन से इसका इस्तेमाल किया है।
स्केफमैन

5
बिल्कुल सही, लेकिन आप एक अनुभवी डेवलपर हैं। आपका बायो आपके JBOSS / स्प्रिंग उपयोगकर्ता को कहता है, लेकिन निश्चित रूप से आप अपने पहले "हैलो, वर्ल्ड" प्रयास में से एक तक नहीं होंगे। मैं पुस्तकालयों के उचित उपयोग से असहमत नहीं हूं। मैं कह रहा हूं कि पहली बार किसी भाषा का प्रयास करने वाले लोगों को इसके तल पर जानने की कोशिश करनी चाहिए, भले ही इसका मतलब यह हो कि वे ऐसे काम कर रहे हैं जिन्हें वे बाद में छोड़ देंगे जब वे अनुभवी होंगे और बेहतर जानेंगे।
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
@JanusTroelsen: यदि अस्वीकार कर दिया गया है, तो प्रयास-साथ-संसाधन विवरण का हवाला दें ।
ट्रैशगॉड

22

में जावा 11java.nio.file.Files वर्ग दो नए उपयोगिता तरीके से बढ़ा दी गई एक फ़ाइल में एक स्ट्रिंग लिखने के लिए। पहली विधि (JavaDoc को यहां देखें ) डिफ़ॉल्ट रूप में charset UTF-8 का उपयोग करती है :

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

और दूसरी विधि (देखें JavaDoc यहाँ ) एक व्यक्तिगत चारसेट निर्दिष्ट करने की अनुमति देता है:

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

दोनों तरीकों में फाइल हैंडलिंग ऑप्शंस सेट करने के लिए एक वैकल्पिक वरार्स पैरामीटर है (देखें JavaDoc यहां )। निम्न उदाहरण एक गैर-मौजूदा फ़ाइल बनाएगा या स्ट्रिंग को मौजूदा एक के साथ जोड़ देगा:

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

13

मैं इस तरह के ऑपरेशन के लिए जब भी संभव हो पुस्तकालयों पर भरोसा करना पसंद करता हूं। इससे मुझे गलती से एक महत्वपूर्ण कदम उठाने की संभावना कम हो जाती है (जैसे कि गलती से ऊपर किए गए भेड़ियों)। कुछ पुस्तकालयों के ऊपर सुझाव दिए गए हैं, लेकिन इस तरह की चीज़ों के लिए मेरा पसंदीदा Google अमरूद है । अमरूद में फाइल नामक एक वर्ग है जो इस कार्य के लिए अच्छी तरह से काम करता है:

// 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
Files.write (CharSequence from, File to, Charset charset) अमरूद 26.0 में चित्रित किया गया है।
डोनाल्ड डक

: पदावनत Files.write को आधुनिक अमरूद विकल्प Files.asCharSink(file, charset).write(text)
वादज़्मी

12

Apache Commons IO api का प्रयोग करें। यह आसान है

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();
        }
    }
}

Files.write (पथ, बाइट []) UTF-8 एन्कोडिंग का उपयोग करेगा। String.getBytes () डिफ़ॉल्ट प्लेटफ़ॉर्म एन्कोडिंग का उपयोग करता है। तो यह एक संभावित मुद्दा है। String.getBytes (StandardCharsets.UTF_8) का उपयोग करें!
rmuller

11

यह प्रयोग करें, यह बहुत पठनीय है:

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

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

यह किसी मौजूदा उत्तर की प्रति भी है। : c
james.garriss

2
क्षमा करें, लेकिन मैंने java8 का आविष्कार नहीं किया, मैं इस लाइन का उपयोग करने वाला एकमात्र व्यक्ति नहीं हूं। लेकिन यह एक ही प्रश्न के अन्य उत्तरों से एक प्रति अतीत नहीं है
Ran Adler

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
एक बार जब मूल प्रश्न का उत्तर दे दिया गया है और ओपी संतुष्ट और लंबे समय से चला गया है, तो इस तरह के पृष्ठ केवल उन लोगों के लिए एक उपयोगी कलाकृति के रूप में काम करते हैं जो Google खोज से यहां आते हैं। मैं इस पृष्ठ पर एक फ़ाइल के लिए एक मिनी पाठ परिशिष्ट बनाने के लिए उतरा। इसलिए ओपी के चले जाने के बाद ओपी के बजाय पूरे दर्शकों से बात करना अच्छा है।
एरिक लेसचिन्स्की

3

लेखक / आउटपुटस्ट्रीम को अंततः ब्लॉक में बंद करना बेहतर है, बस कुछ होने की स्थिति में

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

1
इससे भी बेहतर: कोशिश के साथ संसाधनों का उपयोग करें
Janus Troelsen

हां, @JanusTroelsen सही है, बेहतर उपयोग करें-साथ-साथ संसाधनों का स्टेटमेंट docs.oracle.com/javase/tutorial/essential/exception//

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 विकल्प मौजूद हैं। दूसरे शब्दों में, यह लिखने के लिए फ़ाइल को खोलता है, अगर यह मौजूद नहीं है, तो फ़ाइल का निर्माण करना या किसी मौजूदा नियमित फ़ाइल को 0. के आकार में छोटा करना। विधि यह सुनिश्चित करती है कि फ़ाइल तब बंद हो जब सभी लाइनें लिखी गई हों ( या I / O त्रुटि या अन्य रनटाइम अपवाद को फेंक दिया गया है)। यदि I / O त्रुटि होती है, तो ऐसा फ़ाइल के निर्माण या छंटनी के बाद, या फ़ाइल पर कुछ बाइट्स लिखे जाने के बाद हो सकता है।

कृपया ध्यान दें। मैं देखता हूं कि लोगों ने जावा के बिल्ट-इन के साथ पहले ही जवाब दे दिया है Files.write, लेकिन मेरे जवाब में ऐसा क्या खास है, जिसका कोई उल्लेख नहीं करता है, यह विधि का ओवरलोड संस्करण है, जो एक byte[]सरणी के बजाय, इटरटेबल ऑफ चार्जसेंस (यानी स्ट्रिंग) लेता है , इस तरह text.getBytes()की आवश्यकता नहीं है , मुझे लगता है कि थोड़ा क्लीनर है।


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

मेरा तरीका सभी एंड्रॉइड संस्करणों पर चलने और URL / URI जैसे fecthing संसाधनों की जरूरतों के कारण स्ट्रीम पर आधारित है, किसी भी सुझाव का स्वागत है।

जहाँ तक संबंधित है, धाराएँ (InputStream और OutputStream) बाइनरी डेटा ट्रांसफर करती हैं, जब डेवलपर एक स्ट्रिंग को स्ट्रीम में लिखने के लिए जाता है, तो उसे पहले बाइट में बदलना होगा, या दूसरे शब्दों में उसे एनकोड करना होगा।

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

आप ArrayList का उपयोग कर सकते हैं TextArea की सभी सामग्री को छूट के लिए, और सहेजें को कॉल करके पैरामीटर के रूप में भेजें, जैसा कि लेखक ने सिर्फ स्ट्रिंग लाइनें लिखी हैं, फिर हम अंत में अपने ArrayList को लिखने के लिए "लाइन" लाइन के लिए उपयोग करते हैं। हम txt फ़ाइल में TextArea की सामग्री होंगे। अगर कुछ समझ में नहीं आता है, तो मुझे खेद है कि Google अनुवादक है और मुझे अंग्रेजी नहीं आती है।

विंडोज नोटपैड देखें, यह हमेशा लाइनों को कूदता नहीं है, और सभी को एक लाइन में दिखाता है, वर्डपैड ओके का उपयोग करें।


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);     
    }   
}

आप खोले गए संसाधनों का एक समूह छोड़ सकते हैं। यह एक बुरा अभ्यास है, कृपया, ऐसा न करें।
बोरिस ब्रोड्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.