「n」個の .txt または .java ファイルを読み取り、これらのファイルから UML ダイアグラムを作成する機能を持つプログラムを作成しています。読み取り方法はありますが、同じファイルをさらにロードすると問題が発生しました。UML ダイアグラムの作成に問題が生じるため、同じファイルのロードを拒否したいと思います。
アップロードされたファイルをArrayListに保存し、以前にロードされたファイルがあるArrayListに保存されたファイルで各ロードファイルをチェックするように解決しようとしています。
次の問題は、同じファイルを選択したときに [はい] または [いいえ] ボタンをクリックすると、ファイルが均等に読み込まれることです。
そして、この回答を作成すると、次の問題が見つかりました。ユーザーが複数のファイルを選択すると、ArrayList は一度に 2 つのファイルを追加する方法を知りません。
この問題をより簡単に解決する方法はありますか?
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);
}
}
}
}
アドバイスをありがとう。私はすでにアイデアを失いました。私の英語でごめんなさい。