Java在文件中附加文本而不是覆盖

时间:2016-07-17 17:11:50

标签: java javafx

我第一次保存文件,即使它存在,我也得到了我想要的结果。该文件被覆盖。现在,如果我再次保存,文本将附加到文件而不是覆盖。我试过应用我在这里找到的类似问题的方法,但没有解决这个问题。可能的副本没有回答这个问题。当我第一次保存文件时,行为是我想要的,文件被覆盖。但是,随后打开java窗口的所有后续保存。那是不对的。我怀疑写完后文件可能没有关闭。

编辑: 这是一个javafx包,所以运行的最小代码量会有点长,但现在就可以了。

MainController:

public class MainController{

/** Holder of a switchable vista. */
@FXML public StackPane vistaHolder;

@FXML
public void programExit(){System.exit(0);}
public void permutationAnalyzer(){VistaNavigator.loadVista(VistaNavigator.VISTA_3);}

@FXML
public void saveFile() throws IOException {
    OptionsDataCollector.generateOptionsFile();
}

public void setVista(Node node) {
    vistaHolder.getChildren().setAll(node);
}
}

正在保存的数据:

public class OptionsDataCollector{
    public static void generateOptionsFile() throws IOException {
        StringBuilder moduleData = new StringBuilder();
        moduleData.append("--target_perm_group_size\t").append(targetGroupSize).append("\n");
        moduleData.append("--prog_check\t").append(progCheck).append("\n");
        FileSaveUtility.fileSaveWindow(moduleData.toString());
        //The next line is the answer.
        moduleData.setLength(0);
    }
}

的FileSave:

public class FileSaveUtility {

private static void saveFile(String content, File file) throws IOException {

    FileWriter fileWriter = new FileWriter(file.getAbsoluteFile(), false);
    BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
    bufferedWriter.write(content);
    bufferedWriter.close();

    //fileWriter.write(content);
    //fileWriter.close();
}

public static void fileSaveWindow(String outFileData) throws IOException {
    Stage primaryStage = new Stage();
    FileChooser fileChooser = new FileChooser();
    FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
    fileChooser.getExtensionFilters().add(extFilter);
    fileChooser.setInitialFileName("run_Volundr.txt");
    File file = fileChooser.showSaveDialog(primaryStage);
    if(file != null){
        saveFile(outFileData, file);
        //primaryStage.close(); 
    }
}
}

我没有包含FXML文件或生成它的MainApp。如果有人想要,我可以添加它们。我尝试使用StandardOpenOptions.Truncate_Exsisting和Files.deleteIfExsists关闭舞台。有一个对象或流没有在某处关闭。

0 个答案:

没有答案