Список уникальных директорий.

Тут позарез нужно было (и не раз) узнать, какие папки (директории) содержатся где-то. И не просто в директирии, а с n-ым уровнем вложенности.
Имена нужны в единственном числе, т.е. список уникальных имён директорий.
15 минут "на коленке" и готово.
Выглядит ужасно, но результатом я доволен.
Вот она
Ниже код:


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class TestFrame extends JFrame {

private static final long serialVersionUID = 1L;
private final JScrollPane rootContentScroll = new JScrollPane();
private List<String> names;
private final JTextArea textArea = new JTextArea();
public TestFrame() {
super("Проверка директории...");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());

mainPanel.add(rootContentScroll, BorderLayout.CENTER);
rootContentScroll.setViewportView(textArea);

getContentPane().add(mainPanel);

setPreferredSize(new Dimension(600, 600));
pack();
setLocationRelativeTo(null);
setVisible(true);
names = new ArrayList<String>();
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setAcceptAllFileFilterUsed(false);
int ret = fileChooser.showDialog(null, "Выбор директории");
if (ret == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
checkDir(file);
}

}
private void checkDir(File Dir) {
File[] children = Dir.listFiles();
if (children != null) {
for (int i = 0; i < children.length; i++) {
if (children[i].isDirectory())
{
String label = (children[i].getName());
if (names.contains(children[i].getName())) {
continue;
}
else {
textArea.append(label + "\r\n"); // для винды
names.add(label);
}
checkDir(children[i]);
}
}
}
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestFrame();
}
});
}
}

Популярные сообщения из этого блога

Настройка сети в VirtualBox

Перемещаемые подписи в QGIS

Релиз тестовой версии LandProcessor