public List<DicCat> getCatList()
	{
		List<DicCat> catList = null;

		BufferedReader br = null;
		try {
			br = new BufferedReader(new InputStreamReader(new FileInputStream("naver_cat_all.txt"), "utf-8"));
			String line = null;
			DicCat cat = null;
			Hashtable<String, DicCat> catMap = new Hashtable<String, DicCat>();
			while( (line = br.readLine()) != null ) {
				String[] temp = line.split(",");
				if( temp[0].equals("null") ) {
					cat = new DicCat(null, temp[1].trim(), temp[2].trim());
				} else {
					cat = new DicCat(temp[0].trim(), temp[1].trim(), temp[2].trim());
				}
				catMap.put(cat.id, cat);
			}

			// set parent
			DicCat parentCat = null;
			for( DicCat dc : catMap.values() ) {
				if( dc.parentId == null ) {
					continue;
				}
				parentCat = catMap.get(dc.parentId);
				parentCat.add(dc);
			}

			// set first depth
			List<DicCat> topCatList = new ArrayList<DicCat>();
			for( DicCat dc : catMap.values() ) {
				if( dc.parentId == null ) {
					topCatList.add(dc);
				}
			}

			// sort top nodes
			Collections.sort(topCatList);

			// print
			catList = new ArrayList<DicCat>();
			for( DicCat dc : topCatList ) {
				setParent(dc, 0, catList);
			}

		} catch (Exception e) {
			logger.error("Error", e);
		}
		return catList;
	}