我正在创建程序,其功能是读取“n”.txt或.java文件以及这些文件创建UML图。我有阅读方法,但我遇到了加载更多相同文件的问题。我想拒绝加载相同的文件,因为它会产生创建UML图的问题。
我试图解决它,以便将上传的文件存储到ArrayList中,并使用保存在ArrayList中的文件检查每个加载文件,其中包含以前加载的文件。
接下来的问题是当我选择相同的文件时,我点击按钮是或否,文件同样加载。
当我创建这个答案时,我发现了下一个问题。当用户选择多个文件时,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);
}
}
}
}
感谢您的任何建议。我已经失去了想法。 抱歉我的英文。
答案 0 :(得分:1)
您可以使用找到的here
的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();
,所以您需要做的就是将其添加到包含已加载文件名的数组中。