我第一次保存文件,即使它存在,我也得到了我想要的结果。该文件被覆盖。现在,如果我再次保存,文本将附加到文件而不是覆盖。我试过应用我在这里找到的类似问题的方法,但没有解决这个问题。可能的副本没有回答这个问题。当我第一次保存文件时,行为是我想要的,文件被覆盖。但是,随后打开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关闭舞台。有一个对象或流没有在某处关闭。