从TextArea获取输入并将输入附加到现有的.txt文件

时间:2018-08-02 15:31:41

标签: java file-io text-files fxml filewriter

我创建了一个Java fxml和一个对应的控制器类。

在控制器类中,我有:

@FXML
private TextArea addBox;
@FXML
private Button addButton;

我还有一个带有名为addButton的附加方法的“添加”按钮,因此当按下“添加”按钮时,来自TextArea的输入将添加到我尝试的现有Data.txt文件中:

 private void addButton(ActionEvent event) throws IOException {
   Writer output;
   output = new BufferedWriter(new FileWriter("Data.txt", true));
   output.append(addBox.getText());
   output.close();
}

    @FXML
private void addButton(ActionEvent event) throws IOException {
   try(FileWriter fw = new FileWriter("Data.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw))
 {
out.println(addBox.getText());


} catch (IOException e) {

}

类似地,如果我将John放入TextArea(addBox)并单击“删除”按钮,则它应删除其中包含John的行。我无法使用这两种方法。 AddBox.getText();有什么问题吗?它不应该获取输入并将其视为String吗?

@FXML
private void deleteButton(ActionEvent event) throws FileNotFoundException, IOException {
    File inputFile = new File("Data.txt");
    File tempFile = new File("myTempFile.txt");

    BufferedReader reader = new BufferedReader(new FileReader(inputFile));
    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

    String lineToRemove = addBox.getText();
    String currentLine;

    while ((currentLine = reader.readLine()) != null) {
        // trim newline when comparing with lineToRemove
        String trimmedLine = currentLine.trim();
        if (trimmedLine.equals(lineToRemove)) {
            continue;
        }
        writer.write(currentLine + System.getProperty("line.separator"));
    }
    writer.close();
    reader.close();
    boolean successful = tempFile.renameTo(inputFile);
}

在我看来,没有任何语法错误,因为它运行时没有错误。但是,它不会向现有的.txt文件添加任何内容。

1 个答案:

答案 0 :(得分:0)

您的印刷机是否用于多个实例?您可能希望在每次写入后尝试使用pw.flush()-否则它可能会做一些奇怪的事情。这里有更多

How to use flush() for PrintWriter

此外,您是否知道addbox.getText()是否产生任何要传递给印刷机的文本?您总是可以添加一个中间变量,并检查其中是否包含任何变量,以便快速,轻松地进行故障排除。

此外,我会在注释中添加它,但是我还不能-如果您正在寻找可能发生的每种可能的异常,则可能想捕获Exception e而不是IOException。