Làm cách nào để lưu Chuỗi vào tệp văn bản bằng Java?


699

Trong Java, tôi có văn bản từ một trường văn bản trong một biến Chuỗi gọi là "văn bản".

Làm cách nào để lưu nội dung của biến "văn bản" vào một tệp?

Câu trả lời:


727

Nếu bạn chỉ đơn giản xuất ra văn bản, thay vì bất kỳ dữ liệu nhị phân nào, những điều sau đây sẽ hoạt động:

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

Sau đó, viết Chuỗi của bạn vào nó, giống như bạn làm với bất kỳ luồng đầu ra nào:

out.println(text);

Bạn sẽ cần xử lý ngoại lệ, như mọi khi. Hãy chắc chắn gọiout.close() khi bạn đã viết xong.

Nếu bạn đang sử dụng Java 7 trở lên, bạn có thể sử dụng " câu lệnh thử tài nguyên " sẽ tự động đóng PrintStreamkhi bạn hoàn thành với nó (tức là thoát khỏi khối) như vậy:

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

Bạn vẫn sẽ cần phải ném một cách rõ ràng java.io.FileNotFoundExceptionnhư trước đây.


4
@Justin, bạn cũng có thể chuyển một đường dẫn tuyệt đối (ví dụ: "/tmp/filename.txt") cho hàm tạo FileOutputStream, để lưu tệp bất cứ nơi nào bạn muốn
Jonik

7
Btw, điều này có thể được đơn giản hóa bằng cách sử dụng các hàm tạo tiện lợi PrintStream đã có từ 1.5. Điều này sẽ đủ: PrintStream out = new PrintStream ("filename.txt");
Jonik

10
Cần phải đóng tập tin đó vào một lúc nào đó ...? codecodex.com/wiki/ASCII_file_save#Java
JStrahl

2
Bạn muốn sử dụng thử {} Catch () {} cuối cùng {}, trong đó cuối cùng {} bạn đóng tệp nếu nó không phải là null.
Benas

23
Trong java8, bạn có thể thử (PrintStream ps = new PrintStream ("tên tệp")) {ps.println (out); } điều này sẽ xử lý gần với bạn
Anton Chikin

245

Apache Commons IO chứa một số phương thức tuyệt vời để làm điều này, cụ thể là FileUtils chứa phương thức sau:

static void writeStringToFile(File file, String data) 

cho phép bạn viết văn bản vào một tệp trong một cuộc gọi phương thức:

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

Bạn cũng có thể muốn xem xét chỉ định mã hóa cho tệp.


10
Chỉ cần một chỉnh sửa nhỏ, đoạn thứ hai sẽ đọc: FileUtils.writeStringToFile (Tệp mới ("test.txt"), "Xin chào tệp");
pm_labs

3
Đối với những người trong chúng ta thích Guava, nó cũng có thể làm điều này .
Jonik

10
Chức năng hiện không được chấp nhận, bạn nên thêm bộ ký tự mặc định ->FileUtils.writeStringToFile(new File("test.txt"), "Hello File", forName("UTF-8"));
Paul Fournel

97

Hãy xem API tệp Java

một ví dụ nhanh:

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

@ XP1 Tôi biết, đó là một cải tiến tuyệt vời. Tôi đã sử dụng Lombok cho điều này trong Java 6: cứ tiếp tục @Cleanup new FileOutputStream(...)và bạn đã hoàn thành.
Jorn

6
Đừng quên gọi ra.flush (); sau đó out.c Đóng ();
Alex Byrth

@AlexByrth tại sao anh?
Andrew Tobilko

1
Các tệp lớn được ghi trong nền (một luồng khác) và mất thời gian để ghi. Gọi flush () đảm bảo rằng mọi thứ đã được ghi trên dòng tiếp theo, đồng bộ hóa hoạt động. Nhưng đây là tùy chọn , nhưng thực hành tốt nếu bạn xử lý các tệp lớn, dưới dạng nhật ký.
Alex Byrth

1
Lưu ý rằng out.close () đã xóa luồng, điều đó có nghĩa là không cần thiết phải gọi out.flush ().
hjk321

90

Trong Java 7, bạn có thể làm điều này:

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

Có thêm thông tin ở đây: http://www.drdobbs.com/jvm/java-se-7-new-file-io/231600403


3
Trong trường hợp ai đó sau đó tự hỏi, mã hóa sẽ là tiêu chuẩn nền tảng.
Haakon Løtveit

5
content.getBytes(StandardCharsets.UTF_8)có thể được sử dụng để xác định rõ ràng mã hóa.
John29

1
Lưu ý rằng StandardOpenOption.CREATE không phải là một mặc định StandardOpenOption.CREATE và StandardOpenOption.TRUNCATE_EXISTING là mặc định. Để sử dụng mặc định, chỉ cần loại bỏ tham số thứ ba.
Tinus Tate

Xin vui lòng xem bình luận của Tinus Tate! Quá trình để chỉnh sửa ví dụ này là gì? Tôi tự hỏi có bao nhiêu ngàn người đã lấy ví dụ này - chỉ để thấy rằng họ có kết quả bất ngờ khi họ ghi đè lên một tệp có chuỗi ngắn hơn. Như Tinus chỉ ra, TRUNCATE_EXISTING rất quan trọng trừ khi bạn hoàn toàn hiểu và có lý do thực sự cho việc không muốn cắt bớt tệp hiện có khi ghi đè bằng một chuỗi ngắn hơn.
JCH

1
Trong java 11, bạn có thể chỉ cần đặt String làm tham số thứ hai! Hoan hô!
Dennis Glot

78

Chỉ cần làm một cái gì đó tương tự trong dự án của tôi. Sử dụng FileWriter sẽ đơn giản hóa một phần công việc của bạn. Và ở đây bạn có thể tìm thấy hướng dẫn tốt đẹp .

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
Loại bỏ tất cả thử / bắt và đơn giản hóa nó Tôi cũng có thể thực hiện nó trong một dòng chỉ bằng cách thực hiện: (BufferedWriter mới (FileWriter mới (tên tệp))). Write (str);
Artem Barger

6
Vì vậy, hiển thị giải pháp đơn giản và tốt đẹp của bạn. Tôi sẽ rất vui khi học cách làm điều đó theo cách tốt hơn.
Artem Barger

4
Bỏ qua những kẻ troll ... họ luôn chỉ trích mà không đưa ra giải pháp riêng. Cảm ơn vì đã cứu tôi khỏi việc viết mã của riêng tôi / tải xuống thư viện bổ sung và giới thiệu sự phụ thuộc ...
nikib3ro

1
Có vẻ như .close()không ném (ít nhất là trong Java 7?), Là chiếc xe ba bánh cuối cùng có lẽ là dư thừa?
Kos

16
Nuốt phải những ngoại lệ như thế sẽ khiến cuộc sống của bạn trở nên khó khăn khi những ngoại lệ thực sự xảy ra. Ít nhất bạn nên nghĩ lại chúng:throw new RuntimeException(e);
Roger Keays

65

Sử dụng FileUtils.writeStringToFile()từ Apache Commons IO . Không cần phải phát minh lại bánh xe đặc biệt này.


20
Tôi không thể không đồng ý nhiều hơn. Các thư viện này ở đó vì vậy chúng tôi không giới thiệu các lỗi tinh vi trong một giải pháp đơn giản như vậy.
skaffman

3
Không, rõ ràng là không. Tôi chỉ không đồng ý rằng giải pháp của bạn có thể không phải là điều đầu tiên tôi ném vào ai đó là một lập trình viên Java mới bắt đầu. Bạn không gợi ý rằng bạn chưa bao giờ viết một điều như vậy, phải không?
duffymo

8
Tôi có, vâng, nhưng đó là trước khi tôi tìm thấy commons-io. Kể từ khi tìm thấy điều đó, tôi chưa bao giờ viết thứ đó bằng tay, ngay cả trong một dự án một lớp. Nếu tôi biết về nó từ ngày đầu tiên, tôi đã sử dụng nó từ ngày đầu tiên.
skaffman

5
Chính xác, nhưng bạn là một nhà phát triển có kinh nghiệm. Tiểu sử của bạn cho biết người dùng JBOSS / Spring của bạn, nhưng chắc chắn bạn sẽ không phụ thuộc vào ai trong nỗ lực "Xin chào, Thế giới" đầu tiên của bạn. Tôi không đồng ý với việc sử dụng đúng các thư viện. Tôi đang nói rằng những người lần đầu tiên thử ngôn ngữ nên cố gắng biết ngôn ngữ đó ở phía dưới, ngay cả khi điều đó có nghĩa là làm những việc mà họ sẽ loại bỏ sau này khi họ có kinh nghiệm và hiểu rõ hơn.
duffymo

2
Tôi đã thực hiện điều này mà không có commons và bị ném ngoại lệ ít hơn rõ ràng. Sau đó tôi đã thực hiện điều này bằng cách sử dụng commons và nó cho tôi biết chính xác những gì đã sai. Đạo đức của câu chuyện: tại sao sống trong thời kỳ đen tối nếu bạn không phải làm thế?
SilentNot

22

Bạn có thể sử dụng sửa đổi mã dưới đây để ghi tệp của bạn từ bất kỳ lớp hoặc chức năng nào đang xử lý văn bản. Người ta tự hỏi tại sao thế giới cần một trình soạn thảo văn bản mới ...

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
Điều đó không đóng tệp trong trường hợp ngoại lệ.
Tom Hawtin - tackline

1
@JanusTroelsen: Nếu bị từ chối, hãy trích dẫn Tuyên bố thử tài nguyên .
thùng rác

22

Trong Java 11 , java.nio.file.Fileslớp được mở rộng bằng hai phương thức tiện ích mới để viết một chuỗi vào một tệp. Phương thức đầu tiên (xem JavaDoc tại đây ) sử dụng bộ ký tự UTF-8 làm mặc định:

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

Và phương thức thứ hai (xem JavaDoc tại đây ) cho phép chỉ định một bộ ký tự riêng lẻ:

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

Cả hai phương thức đều có tham số Varargs tùy chọn để thiết lập các tùy chọn xử lý tệp (xem JavaDoc tại đây ). Ví dụ sau sẽ tạo một tệp không tồn tại hoặc nối chuỗi vào một tệp hiện có:

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

13

Tôi thích dựa vào các thư viện bất cứ khi nào có thể cho loại hoạt động này. Điều này làm cho tôi ít có khả năng vô tình bỏ qua một bước quan trọng (như lỗi sói đã làm ở trên). Một số thư viện được đề xuất ở trên, nhưng yêu thích của tôi cho loại điều này là Google Guava . Quả ổi có một lớp gọi là Tệp hoạt động độc đáo cho nhiệm vụ này:

// 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
Nếu bạn đang sử dụng ổi, cũng có Charsets.UTF-8.
florian

2
@florian: Thật Charsets.UTF_8ra
Tim Büthe

Thư mục cha phải tồn tại. Ví dụ: Destination.mkdirs ().
AlikElzin-kilaka

2
Files.write (CharSequence từ, File to, charset charset) không được dùng trong ổi 26.0.
Vịt Donald

Quả ổi hiện đại thay thế cho các tập tin không dùng nữa. Viết: Files.asCharSink(file, charset).write(text)
Vadzim

12

Sử dụng Apache Commons IO api. Nó đơn giản

Sử dụng API như

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

Phụ thuộc Maven

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

12

Trong trường hợp nếu bạn cần tạo tệp văn bản dựa trên một chuỗi đơn:

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 (đường dẫn, byte []) sẽ sử dụng mã hóa UTF-8. String.getBytes () sử dụng mã hóa nền tảng mặc định. Vì vậy, đây là một vấn đề tiềm năng. Sử dụng chuỗi.getBytes (StandardCharsets.UTF_8)!
rmuller

11

Sử dụng cái này, nó rất dễ đọc:

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

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

Nó cũng là một bản sao của một câu trả lời hiện có. : c
james.garriss

2
xin lỗi nhưng tôi đã không phát minh ra java8, tôi không phải là người duy nhất sử dụng dòng này. nhưng nó không phải là một bản sao quá khứ từ các câu trả lời khác cho cùng một câu hỏi
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

Bạn có thể chèn phương thức này vào các lớp học của bạn. Nếu bạn đang sử dụng phương thức này trong một lớp với một phương thức chính, hãy thay đổi lớp này thành tĩnh bằng cách thêm từ khóa tĩnh. Dù bằng cách nào bạn cũng sẽ cần nhập java.io. * để làm cho nó hoạt động nếu không File, FileWriter và BufferedWriter sẽ không được nhận ra.


10

Bạn có thể làm điều này:

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

Sử dụng 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);
}

Một từ cho người khôn ngoan - điều này sẽ tạo ra một tệp mới nếu nó không có ở đó, nhưng sẽ ghi đè lên các ký tự của tệp hiện có nếu có. Nếu dữ liệu mới nhỏ hơn, điều đó có nghĩa là bạn có thể tạo một tệp bị hỏng. Hỏi tôi làm sao tôi biết!
Chris Rae

Ok, sao bạn biết?
ojblass

Chỉ cần sử dụng Files.write(targetPath, bytes);để ghi đè lên các tập tin sau đó. Nó sẽ hoạt động như mong đợi.
BullyWiiPlaza

8

Sử dụng org.apache.commons.io.FileUtils:

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

6

Nếu bạn chỉ quan tâm đến việc đẩy một khối văn bản vào tệp, điều này sẽ ghi đè lên mỗi lần.

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

Ví dụ này cho phép người dùng chọn một tệp bằng cách sử dụng trình chọn tệp.


@Eric Leschinski: cảm ơn bạn đã khiến câu trả lời của tôi trở nên chuyên nghiệp hơn (tôi cũng cho rằng đây chính xác là những gì OP muốn vì đây là điều mà hầu hết mọi người muốn, chỉ cần bỏ văn bản và thay thế nó)
bhathiya-perera

2
Khi câu hỏi ban đầu đã được trả lời và OP hài lòng và lâu dài, các trang như thế này chỉ phục vụ như một vật phẩm hữu ích cho những người đến đây từ một tìm kiếm của Google. Tôi đã đến trang này để tạo một ứng dụng văn bản nhỏ vào một tập tin. Vì vậy, thật tốt khi nói chuyện với toàn bộ khán giả thay vì OP sau khi OP tiếp tục.
Eric Leschinski

3

Tốt hơn là đóng trình ghi / đầu ra trong một khối cuối cùng, trong trường hợp có điều gì đó xảy ra

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

1
thậm chí tốt hơn: sử dụng thử với các tài nguyên
Janus Troelsen

Có, @JanusTroelsen là đúng, sử dụng tốt hơn Tuyên bố thử tài nguyên docs.oracle.com/javase/tutorial/essential/exceptions/ Lỗi

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
Mặc dù đoạn mã này có thể là giải pháp, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
Johan

close () có thể không bao giờ được gọi. Xin vui lòng, cải thiện câu trả lời của bạn thêm xử lý trường hợp lỗi thích hợp.
Boris Brodski

0

Tôi nghĩ rằng cách tốt nhất là sử dụng 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));

Xem javadoc :

Viết các dòng văn bản vào một tập tin. Mỗi dòng là một chuỗi char và được ghi vào tệp theo trình tự với mỗi dòng được kết thúc bằng dấu tách dòng của nền tảng, như được định nghĩa bởi thuộc tính line.separator của hệ thống. Các ký tự được mã hóa thành byte bằng bảng mã được chỉ định.

Tham số tùy chọn chỉ định cách tệp được tạo hoặc mở. Nếu không có tùy chọn nào thì phương thức này hoạt động như thể có các tùy chọn CREATE, TRUNCATE_EXISTING và WRITE. Nói cách khác, nó mở tệp để ghi, tạo tệp nếu nó không tồn tại hoặc ban đầu cắt một tệp thông thường hiện có đến kích thước 0. Phương thức đảm bảo rằng tệp được đóng khi tất cả các dòng đã được ghi ( hoặc lỗi I / O hoặc ngoại lệ thời gian chạy khác được đưa ra). Nếu xảy ra lỗi I / O thì nó có thể xảy ra sau khi tệp được tạo hoặc cắt bớt hoặc sau khi một số byte được ghi vào tệp.

Xin lưu ý. Tôi thấy mọi người đã trả lời với Java tích hợp sẵn Files.write, nhưng điều đặc biệt trong câu trả lời của tôi mà dường như không ai đề cập đến là phiên bản quá tải của phương thức lấy Iterable of CharSequence (ví dụ String), thay vì một byte[]mảng, do đó text.getBytes()không bắt buộc , đó là một chút sạch hơn tôi nghĩ.


0

Nếu bạn muốn giữ các ký tự trả về vận chuyển từ chuỗi thành một tệp ở đây là một ví dụ mã:

    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

Cách của tôi dựa trên luồng do chạy trên tất cả các phiên bản Android và nhu cầu sử dụng tài nguyên fectelling như URL / URI, mọi đề xuất đều được chào đón.

Theo như liên quan, các luồng (InputStream và OutputStream) truyền dữ liệu nhị phân, khi nhà phát triển viết một chuỗi thành luồng, trước tiên phải chuyển đổi nó thành byte hoặc nói cách khác là mã hóa nó.

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
Vui lòng thêm xử lý trường hợp lỗi thích hợp đóng tất cả các tài nguyên đã mở và ngoại lệ chống đỡ
Boris Brodski

Bạn có phiền chia sẻ trường hợp xử lý mã như bạn đề nghị, cảm ơn bạn.
牟家宏

-1

Bạn có thể sử dụng ArrayList để đặt tất cả nội dung của TextArea cho ví dụ và gửi dưới dạng tham số bằng cách gọi lưu, vì người viết chỉ viết các dòng chuỗi, sau đó chúng tôi sử dụng dòng "for" để viết ArrayList của chúng tôi vào cuối chúng tôi sẽ là nội dung TextArea trong tệp txt. Nếu một cái gì đó không có ý nghĩa, tôi xin lỗi là dịch giả google và tôi không nói tiếng Anh.

Xem Windows Notepad, nó không phải lúc nào cũng nhảy dòng và hiển thị tất cả trong một dòng, sử dụng Wordpad ok.


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

Bạn có thể để lại một loạt các tài nguyên được mở. Đây là một thực hành xấu, xin vui lòng, không làm điều này.
Boris Brodski
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.