簡體   English   中英

編輯后如何覆蓋(保存)文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM