如何将字符串从变量写入文本文件
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);
。这会保留所有信息,并且不会导致有关必须捕获异常的错误。
我的目标是从文本文件中读取行,检查它们是否是回文,然后将它们写入完全不同的文件。
据我所知,现在的问题出在 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);
。这会保留所有信息,并且不会导致有关必须捕获异常的错误。