[英]How to overwrite (save) a file when it has been edited?
我目前正在開發一個小型數據管理應用程序,並且希望在現有的“另存為 -> XML / CSV”菜單項之外再添加一個“保存”條目。
此條目應使用更改的數據覆蓋上次加載的文件,而無需再次打開對話框(如 MS Excel 或 Word)。
當然我已經做了一些研究,但沒有找到合適的或搜索錯誤的。
我已經擁有這些條目和功能並且它們有效:
MenuItem saveXML = new MenuItem("Save as XML");
saveXML.setOnAction((e) -> {
// save file as XML
});
MenuItem saveCSV = new MenuItem("Save as CSV");
saveCSV.setOnAction((e) -> {
// save file as CSV
});
我想創建這個條目:
MenuItem save = new MenuItem("Save");
saveCSV.setOnAction((e) -> {
// Save the last opened document in the same format (XML or CSV) without any dialog
});
正如 Abra 建議的那樣,您必須通過將最近加載的文件存儲在私有字段中來記住它的位置:
private File currentFile;
然后在加載文件時設置它:
MenuItem load = new MenuItem("Load");
load.setOnAction(e -> {
FileChooser chooser = new FileChooser();
// (set FileChooser's title and filters here)
File file = chooser.showOpenDialog(stage);
if (file != null) {
// (load file into application)
this.currentFile = file;
}
});
現在,您可以使用該currentFile
值來保存:
MenuItem save = new MenuItem("Save");
save.setOnAction(e -> {
if (currentFile != null) {
// (write to currentFile)
} else {
// New file; ask user for save location.
FileChooser chooser = new FileChooser();
// (set FileChooser's title and filters here)
File file = chooser.showSaveDialog(stage);
if (file != null) {
// (save file as CSV or XML depending on chosen filter)
this.currentFile = file;
}
}
});
如果您還沒有,您可能希望將保存邏輯移動到私有方法中。
我有一個適合我的解決方案。 它可能不是最佳解決方案,但它仍然有用。
我將一個屬性傳遞給我的 menuItem,其中包含我的文件.put("FILE_LOCATION",..)的路徑,並在保存事件中使用此屬性到 select 最后一個路徑。
由於我還想自動保存為 CSV 或 XML 文件,因此我從包含另一個變量的變量中刪除路徑(如果存在)。 .remove("FILE_LOCATION")
loadCSV.setOnAction(e -> {
...
File f = fileChooser.showOpenDialog(null);
loadCSV.getProperties().put("FILE_LOCATION", f.getAbsolutePath());
loadXML.getProperties().remove("FILE_LOCATION");
});
然后我檢查填充了哪個變量,然后運行相應的方法。
save.setOnAction(e -> {
try {
if (loadCSV.getProperties().isEmpty() == false) {
File saveCSV = new File(loadCSV.getProperties().get("FILE_LOCATION").toString());
if (saveCSV != null) {
CSV.writeCSV(saveCSV, DataHandler.INSTANCE.foodlist());
}
} else if (loadXML.getProperties().isEmpty() == false) {
File saveXML = new File(loadXML.getProperties().get("FILE_LOCATION").toString());
if (saveXML != null) {
XML.writeXMLList(saveXML, DataHandler.INSTANCE.foodlist());
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.