如何将字符串从变量写入文本文件

How to write String from variable to text file

我的目标是从文本文件中读取行,检查它们是否是回文,然后将它们写入完全不同的文件。

据我所知,现在的问题出在 if 语句块中,我在该语句块中成功检查了回文,但似乎无法将它们写入另一个文件,因为它们存储在变量中。

当我使用 BufferedWriter 写入方法并将参数设置为带引号的实际字符串时,一切正常。

我该如何解决这个问题?


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;

public class Zadatak14 {

    public static void main(String[] args) {

        BufferedReader br;

        try {

            br = new BufferedReader(new FileReader("C:\Users\Luka\Documents\NetBeansProjects\CS101-DZ14-14\src\zadatak14\ulaz.txt"));

            String line;
            

            while ((line = br.readLine()) != null) {

                String palindrome = new StringBuilder(line).reverse().toString();

                BufferedWriter bw = new BufferedWriter(new FileWriter("C:\Users\Luka\Documents\NetBeansProjects\CS101-DZ14-14\izlaz.txt"));
                
                
                
                
                if (line.contains(palindrome)) {

                    System.out.println(line);

                    bw.write(line);

                }

                bw.close();

            }

            br.close();

        } catch (FileNotFoundException e) {
            System.out.println("Greska");
        } catch (IOException ex) {
            System.out.println("Greska");
        }
    }

}

BufferedWriter bw = new BufferedWriter

您正在为您输入的每一行创建一个新的编写器,这肯定是您不想要的。在打开 reader.

之后,将作者的创建移至顶部

br.close();

不是你怎么做的。这就是你的做法:

try (BufferedWriter bw = new BufferedWriter(new FileWriter("...."))) {
   // code here
}
// no matter how you get out of this code, the file is closed.

你用上面的方法做的原因是如果你return出块,如果发生异常,bw.close()将不会被调用。使用 try 构造,当代码从块中退出时,无论它如何执行,该流都会关闭。

} catch (FileNotFoundException e) {
            System.out.println("Greska");

不是你怎么做的 - 异常包含很多有用的信息(至少 4 件事,对于某些特定类型的异常更多:类型,消息,堆栈跟踪,原因),你把它们全部扔进去垃圾。将有关问题的信息扔进垃圾箱是个坏主意。不。正确的做法是将 throws Exception 添加到 public static void main(String[] args) 方法中,这样就根本不需要 catch 了。如果必须的话,如果您没有处理问题的好方法,则 catch 块的正确主体是 throw new RuntimeException("Uncaught", e);。这会保留所有信息,并且不会导致有关必须捕获异常的错误。