dirdata.java
来自「一个日本流行的,功能较全的开源Web办公管理(Groupware)系统。」· Java 代码 · 共 232 行
JAVA
232 行
package jp.co.sjts.gsession.link;
/*
* 僨傿儗僋僩儕僨乕僞 DirData.java
* Copyright (C) 1999-2000 Japan Total System Co,LTD
* Satoru K <koni@sjts.co.jp>
*/
import java.io.File;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.util.Iterator;
import java.util.Collections;
import jp.co.sjts.gsession.tools.*;
public class DirData extends GSTextFile
{
class DirInfo{
private int dirId=0; // 帺暘偺僨傿儗僋僩儕ID
private String name = null; // 僨傿儗僋僩儕柤
private int parentDirId = 0; // 恊僨傿儗僋僩儕ID
private Set childDirIdSet = null; // 巕僨傿儗僋僩儕ID偺攝楍
DirInfo(int dirId,String name,int parentDirId,String childDirIds)
{
childDirIdSet = Collections.synchronizedSet(new HashSet());
// 僨傿儗僋僩儕ID
this.dirId = dirId;
// 僨傿儗僋僩儕柤
this.name = name;
// 恊僨傿儗僋僩儕
this.parentDirId = parentDirId;
// 巕僨傿儗僋僩儕
if(childDirIds!=null){
StringTokenizer st = new StringTokenizer(childDirIds,":");
while(st.hasMoreTokens())
childDirIdSet.add(new Integer(st.nextToken()));
}
}
boolean addChildDir(int childDirId)
{
synchronized(childDirIdSet){
return childDirIdSet.add(new Integer(childDirId));
}
}
boolean delChildDir(int childDirId)
{
synchronized(childDirIdSet){
return childDirIdSet.remove(new Integer(childDirId));
}
}
public String toString()
{
synchronized(childDirIdSet){
String buf = Integer.toString(dirId)+";";
buf += name+";";
buf += Integer.toString(parentDirId)+";";
Iterator it = childDirIdSet.iterator();
while(it.hasNext())
buf += ((Integer)it.next()).toString()+":";
return buf;
}
}
}
public static final String FILENAME = "dirdata";
private File file=null;
private Map dirMap=null;
// 僐儞僗僩儔僋僞
public DirData(String dir) throws GSException
{
File dirfile = new File(dir);
dirMap = Collections.synchronizedMap(new HashMap());
// 僨傿儗僋僩儕偑懚嵼偟側偄応崌偼,怴婯偵嶌惉偡傞丅
if(!dirfile.exists())
dirfile.mkdirs();
file = new File(dirfile,FILENAME);
if(!file.exists()){
dirMap = Collections.synchronizedMap(new HashMap());
dirMap.put(new Integer(0),new DirInfo(0,"[儖乕僩]",-1,null));
Save();
}
}
protected File GetFile()
{
return file;
}
synchronized protected void Read(BufferedReader bf)
throws GSException
{
try {
dirMap.clear();
String buf=bf.readLine();
while(buf!=null){
StringTokenizer st = new StringTokenizer(buf,";");
// 僨傿儗僋僩儕ID傪庢摼
Integer dirId = new Integer(st.nextToken());
// 僨傿儗僋僩儕柤傪庢摼
String name = st.nextToken();
// 恊僨傿儗僋僩儕ID傪庢摼
int parentDirId = Integer.parseInt(st.nextToken());
// 巕僨傿儗僋僩儕ID偺庢摼
String childlen=null;
if(st.hasMoreTokens())
childlen = st.nextToken();
dirMap.put(dirId,
new DirInfo(dirId.intValue(),name,parentDirId,childlen));
buf=bf.readLine();
}
} catch(IOException e){
throw new GSException("IO僄儔乕",e);
}
}
synchronized protected void Write(PrintWriter pw)
throws GSException
{
Iterator it = dirMap.values().iterator();
while(it.hasNext()){
DirInfo di = (DirInfo)it.next();
pw.println(di.toString());
}
}
// 僨傿儗僋僩儕捛壛
synchronized protected boolean addDir(int dirId,String name,int parentDirId)
throws GSException
{
DirInfo dirInfo = new DirInfo(dirId,name,parentDirId,null);
dirMap.put(new Integer(dirId),dirInfo);
DirInfo pdirInfo = (DirInfo)dirMap.get(new Integer(parentDirId));
return pdirInfo.addChildDir(dirId);
}
// 僨傿儗僋僩儕嶍彍
synchronized protected boolean delDir(int dirId)
throws GSException
{
DirInfo deldirInfo = (DirInfo)dirMap.get(new Integer(dirId));
DirInfo pdirInfo = (DirInfo)dirMap.get(new Integer(deldirInfo.parentDirId));
dirMap.remove(new Integer(dirId));
return pdirInfo.delChildDir(dirId);
}
// 僨傿儗僋僩儕柤曇廤
synchronized protected void editDir(int dirId,String name)
throws GSException
{
DirInfo dirInfo = (DirInfo)dirMap.get(new Integer(dirId));
if(dirInfo==null)
return;
dirInfo.name = name;
}
synchronized public String getDirName(int dirId)
{
DirInfo deldirInfo = (DirInfo)dirMap.get(new Integer(dirId));
if(deldirInfo==null)
return null;
return deldirInfo.name;
}
synchronized public int getParentDirId(int dirId)
{
DirInfo deldirInfo = (DirInfo)dirMap.get(new Integer(dirId));
if(deldirInfo==null)
return -1;
return deldirInfo.parentDirId;
}
synchronized public int[] getChildDirIds(int dirId)
{
DirInfo deldirInfo = (DirInfo)dirMap.get(new Integer(dirId));
if(deldirInfo==null)
return null;
if(deldirInfo.childDirIdSet.size()<=0)
return null;
Iterator it = deldirInfo.childDirIdSet.iterator();
int[] cids = new int[deldirInfo.childDirIdSet.size()];
for(int i=0;it.hasNext();i++){
cids[i] = ((Integer)it.next()).intValue();
}
return cids;
}
synchronized int getDirSize()
{
return dirMap.size();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?