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