用socket實現的檔案伺服器 3

2021-04-01 20:19:28 字數 3675 閱讀 4167

//主題帖cache規則:讀則加入,否則不需要加入

private static cache topiccache = new cache(300*1000*1000);

//回帖cache

private static cache replycache = new cache(300*1000*1000);

/*** 取主題貼,首先應該從cache中取

* * @param forumid

* @param topicid

* @return

*/public string gettopiccontent(int forumid, int topicid)

// 如果cache中沒有,就從檔案中讀

tryin.close();

//加入cache

topiccache.add(forumid+"_"+topicid,s2);

return s2;

}catch (exception e)

return "";

}/**

* 取回貼,首先應該從cache中取

* * @param forumid

* @param topicid

* @return

*/public list getreplylist(int forumid, int topicid)

// 如果cache中沒有,就從檔案中讀

list list = new arraylist();// 回貼的檔案記錄的list,不需要分解。分解工作在client來完成

tryin.close();

//加入到cache中

replycache.add(forumid+"_"+topicid,list);

}catch (exception e)

return list;

}/**

* 發帖

* * @param forumid

* @param topicid

* @return

*/public void addtopic(int forumid, int topicid, string content)

//寫入檔案

printwriter out = new printwriter(new filewriter(gettopicfile(forumid,topicid)));

out.write(content);

out.close();

}catch (exception e)

}/**

* 續貼

* @param forumid

* @param topicid

* @param content

*/public void resumetopic(int forumid, int topicid, string content)

//寫入檔案

content=gettopiccontent(forumid,topicid)+content;

printwriter out = new printwriter(new filewriter(filepath));

out.write(content);

out.close();

//如果cache中有,則需要更新

object cachecontent=topiccache.get(forumid+"_"+topicid);

if(cachecontent!=null)

}catch (exception e)

}/**

* 回貼,如果沒有回過貼,要新建檔案;如果回過,要續加回貼

* @param forumid

* @param topicid

* @return

*/public void addreply(int forumid, int topicid,string content,string qq,string replytime)

else//以前回過貼,從檔案中讀出回貼數,並修改為+1

//修改回貼數

dataoutputstream out=new dataoutputstream(new bufferedoutputstream(new fileoutputstream(replycountpath)));

out.writeint(replycount);

out.close();

//寫入檔案           

randomaccessfile rf=new randomaccessfile(filepath,"rw");

rf.seek(rf.length());

string str=new integer(replycount)+"/0x1e"+qq+"/0x1e"+replytime+"/0x1e"+content+"/n";

rf.write(str.getbytes());           

rf.close();

}catch (exception e)

}/**

* 刪主題貼和它的回貼

* @param forumid

* @param topicid

* @param content

*/public void deletetopic(int forumid, int topicid)

//如果cache中有,則需要刪除

object cachecontent=topiccache.get(forumid+"_"+topicid);

if(cachecontent!=null)

//刪除回貼

file reply=new file(getreplyfile(forumid,topicid));

if(reply.exists())

file replycount=new file(getreplycountfile(forumid,topicid));

if(replycount.exists())

//如果cache中有,需要刪除

object replylist=replycache.get(forumid+"_"+topicid);

if(replylist!=null)

}catch (exception e)

}/**

* 刪某個回貼

* @param forumid

* @param topicid

* @param content

*/public void deletereply(int forumid, int topicid,int replyid)

else

}rfbak.close();

rf.close();

//原檔案刪除

file file=new file(filepath);

file.delete();

//新檔案改名

file file2=new file(filepath+".bak");

file2.renameto(new file(filepath));

//如果cache中有,需要刪除

object replylist=replycache.get(forumid+"_"+topicid);

if(replylist!=null)

}catch (exception e)

}

用socket實現的檔案伺服器 5

資料包內容解析 author hongsoft public class packetparserthread extends thread public void run else catch ioexception e finally catch ioexception e 中間全部用ox1e分...

用socket實現的檔案伺服器 3

主題帖cache規則 讀則加入,否則不需要加入 private static cache topiccache new cache 300 1000 1000 回帖cache private static cache replycache new cache 300 1000 1000 取主題貼,首...

用socket實現的檔案伺服器 1

public class forumfileclient catch exception e private socket socket private bufferedreader in private printwriter out public forumfileclient catch ex...

用socket實現的檔案伺服器 2

業務邏輯層呼叫的介面 author hongsoft public class forumfiledao catch exception e ffc.closesocket return content 得到回帖列表 param forumid param topicid return public...

用socket實現的檔案伺服器 5

資料包內容解析 author hongsoft public class packetparserthread extends thread public void run else catch ioexception e finally catch ioexception e 中間全部用ox1e分...