簡體   English   中英

如何拒絕使用 JFileChooser 選擇相同的文件

[英]How to deny choose same file with JFileChooser

我正在創建程序,其 function 是讀取“n”.txt 或 .java 文件,這些文件創建一個 UML 圖。 我有閱讀方法,但我遇到了加載更多相同文件的問題。 我想拒絕加載相同的文件,因為它會在創建 UML 圖時出現問題。

我試圖解決它,以便我將上傳的文件存儲到 ArrayList 中,並使用保存在 ArrayList 中的文件檢查每個加載文件,以前加載的文件在哪里。

下一個問題是,當我選擇相同的文件時,我單擊“是”或“否”按鈕,文件同樣加載。

當我創建這個答案時,我發現了下一個問題。 當用戶 select 多了一個文件時,ArrayList 不知道如何一次添加兩個文件。

有沒有人可以選擇如何更輕松地解決這個問題?

ArrayList<String> filenames = new ArrayList<String>();
JTabbedPane tabbedPaneUML_Files = new JTabbedPane();

private void readFiles() {
    JFileChooser fc = new JFileChooser();
    fc.setMultiSelectionEnabled(true);
    FileNameExtensionFilter fileFilter =
            new FileNameExtensionFilter("Only .txt a .java files",
            "txt", "java");
    fc.setFileFilter(fileFilter);
    int returnValue = fc.showOpenDialog(this);        

    if (returnValue == JFileChooser.APPROVE_OPTION) {
        File[] files = fc.getSelectedFiles();
        File file;            
        tabbedPaneUML_Files.addTab("UML diagram", panelUML);

        for (int i = 0; i < files.length; i++) {
            file = files[i];

            for (int j = 0; j < filenames.size(); j++) {
                if (filenames.get(i).equals(fc.getSelectedFile().getName())) {
                    Object[] options = {"Yes", "No"};

                    int answer = JOptionPane.showOptionDialog(this,
                            "Unable to load the same files! To retrieve the other files?",
                            "Load new file", JOptionPane.YES_NO_OPTION,
                            JOptionPane.WARNING_MESSAGE, null, options, options[0]);     

                    if(answer == 0) {
                        readFiles();
                    }
                }
            }         
            filenames.add(file.getName());
            JTextArea loadCode = new JTextArea();
            JScrollPane scrollingFile = new JScrollPane();
            scrollingFile.setViewportView(loadCode);
            tabbedPaneUML_Files.addTab("" + file.getName(), scrollingFile);
            int ch;

            try {
                Reader charsReader =
                        new InputStreamReader(new FileInputStream(file),
                        "UTF-8");

                while ((ch = charsReader.read()) != -1) {
                    loadCode.append(Character.toString((char) ch));
                }
                loadCode.setSelectionStart(0);
                loadCode.setSelectionEnd(0);
                loadCode.setEditable(false);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(HlavniOkno.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(HlavniOkno.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

感謝您的任何建議。 我已經失去了想法。 對不起我的英語不好。

您可以使用此處找到的 validatedFileChooser

並調整它,而不是有一個無效文件名的列表,有一個已經選擇的文件的列表。 然后你可以編輯這部分:

 if (file.exists() && getDialogType() == SAVE_DIALOG) { int confirm = JOptionPane.showConfirmDialog( this, file.getName() + " already exists? Would you like to overwrite it,", "File already exists". JOptionPane,YES_NO_OPTION. JOptionPane;WARNING_MESSAGE ). if (confirm;= JOptionPane.YES_OPTION) return; }

例如說getDialogType() == LOAD_DIALOG和錯誤消息:“文件已經加載”。

至於多個文件名,執行File[] files = chooser.getSelectedFiles(); 要獲取所選文件的列表,請遍歷它們以獲取它們的名稱,然后將它們存儲在數組中以獲取已選擇的文件名。

編輯- 抱歉剛剛看到你已經完成了File[] files = chooser.getSelectedFiles(); ,因此您需要做的就是將它添加到包含已加載文件名的數組中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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