public List<ClassFileInfo> readFolder(File dir) throws Exception {
		File[] files = dir.listFiles();
		if (files == null)
			throw new NoSuchFileException(dir.getAbsolutePath());

		List<ClassFileInfo> classInfoList = new ArrayList<>();
		for (File file : files) {
			if (!file.exists()) {
				continue;
			} else if (file.isDirectory()) {
				// サブディレクトリの情報を読み込む
				List<ClassFileInfo> subDirInfoList = readFolder(file);
				classInfoList.addAll(subDirInfoList);
			} else if (file.isFile()) {
				// 拡張子が.classのものだけが対象
				if ("class".equals(getSuffix(file.getName()))) {
					logger.info("[START] " + file.getPath());
					classInfoList.add(loadClassInfo(file));
					logger.info("[END] " + file.getPath());
				}
			}
		}
		return classInfoList;
	}