기은P
시간이 멈추는 장소
기은P
  • Programming (272)
    • 개발노트 (1)
    • FrontEnd (56)
      • ES&JS 문법 (14)
      • HTML&CSS (4)
      • React 기본 (18)
      • React 심화 (12)
      • React 이슈 (2)
      • Project 연습 (1)
      • Next.js (5)
    • Backend&Devops (33)
      • AWS (2)
      • Docker (9)
      • Jenkins (6)
      • Nginx (6)
      • Node.js (1)
      • ElasticSearch (5)
      • 프레임워크&아키텍처 (2)
      • 암호화 (0)
      • 기타 (2)
    • 알고리즘 (3)
    • C# (8)
      • WPF (8)
    • Java (51)
      • 순수 Java (18)
      • RDF&Jena (12)
      • RCP&GEF (9)
      • JMX (5)
      • JMapper (3)
      • 오류해결 (4)
    • Database (21)
      • RDBMS (9)
      • NoSQL (2)
      • TSDB (1)
      • GraphQL (1)
      • Hibernate (3)
      • 데이터베이스 이론 (4)
      • Redis (1)
    • 프로토콜 (11)
      • Netty (4)
      • gRPC (5)
      • 프로토콜 개념 (2)
    • Server (4)
      • Linux (4)
    • 2020 정보처리기사 필기 (43)
      • 목차 (1)
      • 기출문제 (1)
      • 1과목 - 소프트웨어 설계 (6)
      • 2과목 - 소프트웨어 개발 (7)
      • 3과목 - 데이터베이스 구축 (8)
      • 4과목 - 프로그래밍 언어 활용 (7)
      • 5과목 - 정보시스템 구축 관리 (10)
    • 2020 정보처리기사 실기 (31)
      • 목차 (4)
      • 기출예상문제 (19)
      • 실기요약 (8)
    • 빅데이터분석기사 필기 (4)
      • 목차 (0)
      • 필기 요약 (3)
    • 전기 공학 (1)
      • CIM (1)
    • 산업자동화시스템 (3)
      • SCADA (1)
      • OPC UA (2)
    • 디자인패턴 (1)
    • 휴지통 (0)

공지사항

  • 공지사항/포스팅 예정 항목

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
기은P

시간이 멈추는 장소

Java/순수 Java

[Java] SWT Tree와 Map을 활용한 Directory 출력 예제 소스

2020. 3. 12. 17:36
반응형
SWT - Tree + Map

 

윈도우의 아무런 특정 파일 경로를 설정하고

특정 파일 아래에 있는 하위 폴더, 파일 들을 SWT의 Tree로 뿌리는 소스이다.

자료구조인 Map을 사용해서 SWT의 Tree, TreeItem으로 File Directory를 출력하는 프로그램이다.

트리구조이기 때문에 parent, child 구조 인 것을 감안하고 분석해보면

그렇게까지 어렵지는 않다.

 

 

소스 코드

 

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;

public class SWTTreeToMap {
	private static Map<String, TreeItem> nodes = new HashMap<>();
	private static Map<TreeItem, List<String>> children = new HashMap<>();

	public static void main(String[] args) {
		final Display display = new Display();
		final Shell shell = new Shell(display);
		shell.setLayout(new FillLayout());

		final Tree tree = new Tree(shell, SWT.BORDER);

		Path path = FileSystems.getDefault().getPath("C:\\DevelopTool\\Photon-Hibernate\\eclipse-rcp-photon-R-win32-x86_64\\eclipse", new String[] {});
		try {
			Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
				@Override
				public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
					TreeItem parent = nodes.get(dir.getParent().toString()); // 부모를 넣는다.
					TreeItem item = null;
					if (parent == null) {
						item = new TreeItem(tree, SWT.NONE);
					} else {
						item = new TreeItem(parent, SWT.NONE);
					}
					item.setText(dir.getFileName().toString());

					nodes.put(dir.toString(), item); // 자신을 넣는다.

					return FileVisitResult.CONTINUE;
				}

				@Override
				public FileVisitResult visitFile(Path dir, BasicFileAttributes attrs) {
					TreeItem parent = nodes.get(dir.getParent().toString()); // TreeItem에 상위 폴더를 세팅(TreeItem 반환)

					if (children.get(parent) == null) // Treeitem(parent)이 null이면
						children.put(parent, new ArrayList<String>()); // 새로 생성

					children.get(parent).add(dir.getFileName().toString());

					return FileVisitResult.CONTINUE;
				}
			});
		} catch (IOException e) {
			e.printStackTrace();
		}

		for (TreeItem parent : children.keySet()) {
			for (String child : children.get(parent)) {
				TreeItem item = new TreeItem(parent, SWT.NONE);
				item.setText(child);
			}

		}

		tree.layout();
		nodes = null;
		children = null;

		shell.setSize(400, 400);
		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}

		display.dispose();
	}
}
반응형
저작자표시 변경금지 (새창열림)

'Java > 순수 Java' 카테고리의 다른 글

[Java] Java Bean이란?  (0) 2020.03.16
[Java] Eclipse 이클립스 크롬 연동하기(Web Browser 연동)  (0) 2020.03.13
[Java] SWT Tree 사용 예제  (0) 2020.03.12
[Java] Reflection  (0) 2020.03.06
[Java] Apache log4j .properties 생성 및 오류 해결 방법  (0) 2020.03.06
    'Java/순수 Java' 카테고리의 다른 글
    • [Java] Java Bean이란?
    • [Java] Eclipse 이클립스 크롬 연동하기(Web Browser 연동)
    • [Java] SWT Tree 사용 예제
    • [Java] Reflection
    기은P
    기은P
    기은P의 블로그 일상과 개발 관련 포스팅 #React #Typescript #Next #Nest https://github.com/kimdongjang

    티스토리툴바