📄 fileserviceimpl.java
字号:
package fileSys.service.impl;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import fileSys.dirManager.DirManager;import fileSys.fileManager.FileManager;import fileSys.util.AFile;import fileSys.util.FileMessage;import fileSys.util.FileMsgBean;import fileSys.util.UserAndPsw;public class FileServiceImpl implements fileSys.service.FileService { private DirManager dirManager; private FileManager fileManager; private String userName; private UserAndPsw userAndpsw; private FileMsgBean fileMsgBean; private Map<String, FileMessage> fileMsgMap; public void setDirManager(DirManager dirManager) { this.dirManager = dirManager; } public void setFileManager(FileManager fileManager) { this.fileManager = fileManager; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public void setUserAndpsw(UserAndPsw userAndpsw) { this.userAndpsw = userAndpsw; } public void setFileMsgBean(FileMsgBean fileMsgBean) { this.fileMsgBean = fileMsgBean; } public void setFileMsgMap() { try { fileMsgMap = fileMsgBean.getFileMsgMap(); } catch (Exception e) { e.printStackTrace(); } } /** * 系统初始化 */ @Override public void init() { String flag; String path = "/main"; Map<String, String> userMap = new HashMap<String, String>(); String username; String password; flag = dirManager.createDir(path); setFileMsgMap(); if (flag == null) { putIntoFileMsgMap("/main","root","root"); //初始时创建10个用户目录 for (int i = 1; i < 11; i++) { username = "user" + i; password = "user" + i; path = "/main/" + username; flag = dirManager.createDir(path); putIntoFileMsgMap(path, "root", username); //初始化时为每个用户创建十个文件或目录并设置其属性 if (flag == null) { dirManager.createDir(path + "/Downloads"); putIntoFileMsgMap(path + "/Downloads", username, username); dirManager.createDir(path + "/Desktop"); putIntoFileMsgMap(path + "/Desktop", username, username); dirManager.createDir(path + "/workspace"); putIntoFileMsgMap(path + "/workspace", username, username); dirManager.createDir(path + "/temp"); putIntoFileMsgMap(path + "/temp", username, username); fileManager.createFile(path + "/install.log"); putIntoFileMsgMap(path + "/install.log", username, username); fileManager.createFile(path + "/config.log"); putIntoFileMsgMap(path + "/config.log", username, username); fileManager.createFile(path + "/syslog"); putIntoFileMsgMap(path + "/syslog", username, username); fileManager.createFile(path + "/info.inf"); putIntoFileMsgMap(path + "/info.inf", username, username); fileManager.createFile(path + "/user" + i + ".inf"); putIntoFileMsgMap(path + "/user" + i + ".inf", username, username); fileManager.createFile(path + "/temp.log"); putIntoFileMsgMap(path + "/temp.log", username, username); } userMap.put(username, password); } try { userAndpsw.setUserMap(userMap); fileMsgBean.saveFileMsgMap(fileMsgMap); } catch (Exception e) { e.printStackTrace(); } } } //*******************************操作目录*****************************// /** * 改变工作目录 * @param srcDir 改变前的目录 * @param destDir 改变到的目的目录 * @return 返回改变后的目录 */ @Override public String changeDir(String srcDir, String destDir) { if (destDir == null) { return srcDir; } return dirManager.changeDir(srcDir, destDir); } /** * 创建新目录 * @param srcDir 当前所在的目录 * @param newDir 新创建的目录 * @return 返回处理结果信息 */ @Override public String createDir(String srcDir, String newDir) { String result; newDir = getRealDest(srcDir,newDir); result = dirManager.createDir(newDir); // 创建目录成功,保存文件的属性信息 if (result == null) { operateFileMsgmap("new", newDir, ""); if(newDir.lastIndexOf('/')==5){ String username = newDir.substring(newDir.lastIndexOf('/')+1); String password = username; try{ Map<String,String> userMap = userAndpsw.getUserMap(); userMap.put(username, password); userAndpsw.setUserMap(userMap); }catch(Exception e){ return "error"; } } } return result; } /** * 删除一个目录 * @param srcDir 当前所在的目录 * @param destdir 待删除的目录 * @return 返回删除目录结果信息 */ @Override public String deleteDir(String srcDir, String destDir) { String result; if (destDir.charAt(0) == '/') { if (srcDir.contains(destDir)) return "used"; } else { destDir = srcDir + "/" + destDir; } result = dirManager.deleteDir(destDir); // 目录删除成功,将重置文件属性信息 if (result == null) { operateFileMsgmap("del", destDir, "empty"); if(destDir.lastIndexOf('/')==5){ String username = destDir.substring(destDir.lastIndexOf('/')+1); try{ Map<String,String> userMap = userAndpsw.getUserMap(); userMap.remove(username); userAndpsw.setUserMap(userMap); }catch(Exception e){ return "error"; } } } return result; } /** * 删除一个非空目录 * @param srcDir 当前所在的目录 * @param destDir 待删除的目录 */ @Override public void deleteNotNullDir(String srcDir, String destDir) { destDir = getRealDest(srcDir,destDir); dirManager.deleteNotNullDir(destDir); //生置文件属性信息 operateFileMsgmap("del", destDir, "notempty"); if(destDir.lastIndexOf('/')==5){ String username = destDir.substring(destDir.lastIndexOf('/')+1); try{ Map<String,String> userMap = userAndpsw.getUserMap(); userMap.remove(username); userAndpsw.setUserMap(userMap); }catch(Exception e){ e.printStackTrace(); } } } //*******************************操作文件*****************************// /** * 创建一个新文件 * @param srcDir 当前所在的目录 * @param newFile 新创建的文件名 * @return 创建文件的结果信息 */ @Override public String createFile(String srcDir, String newFile) { String result; newFile = getRealDest(srcDir,newFile); result = fileManager.createFile(newFile); // 创建文件成功,保存文件的属性信息 if (result == null) { operateFileMsgmap("new", newFile, ""); } return result; } /** * 删除一个文件 * @param srcDir 当前所在的目录 * @param destFile 待删除的文件名 * @return 删除文件结果的信息 */ @Override public String deleteFile(String srcDir, String destFile) { String result; destFile = getRealDest(srcDir,destFile); result = fileManager.deleteFile(destFile); //删除成功,重置文件属性信息 if (result == null) { operateFileMsgmap("del", destFile, "empty"); } return result; } /** * 打开一个指定文件 * @param srcDir 当前所在的目录 * @param destFile 待打开的目标文件名 * @return 打开的文件 */ @Override public AFile openFile(String srcDir, String destFile) { destFile = getRealDest(srcDir,destFile); return fileManager.openFile(destFile); } /** * 打开所有文件 * @param srcDir 当前所在的目录 * @param destFile 待打开的目标文件名 * @return 返回所有的打开的文件 */ @Override public List<AFile> openFiles(String srcDir, String destDir) { destDir = getRealDest(srcDir,destDir); return fileManager.openAllFile(destDir); } /** * 对文件进行读操作 * @param srcDir 当前所在的路径 * @param destFile 要进行读操作的文件 * @return 读取的文件内容 */ @Override public AFile readFile(String srcDir,String destFile) { destFile = getRealDest(srcDir,destFile); return fileManager.openFile(destFile); } /** * 对文件进行写操作 * @param srcDir 当前所在的目录 * @param destFile 要进行写操作的文件 * @return 打开的文件的内容 */ @Override public AFile writeFile(String srcDir,String destFile) { destFile = getRealDest(srcDir,destFile); return fileManager.openFile(destFile); } /** * 保存文件内容 * @param text 文件内容 * @param destFile 文件路径 */ @Override public void saveFile(String text, String destFile) { fileManager.saveFile(text, destFile); } //**********************************权限控制****************************// /** * 用户权限控制 * @param user 当前用户 * @param currentDir 当前所在的路径 * @param destDir 待操作的目录路径 * @return */ @Override public boolean accessControl(String user, String currentDir, String destDir) { String userDir; setUserName(user); if (user.equals("root")) return true; else { destDir = getRealDest(currentDir,destDir); try { userDir = destDir.substring(6, destDir.indexOf('/', 6)); } catch (Exception e) { return false; } if (userDir != null && userDir.equals(user)) return true; return false; } } /** * 判断保护码是否正确 * @param com 当前操作命令 * @param currentDir 当前目录 * @param destFile 需要判断的文件 * @param saveCode 用户输入的保护码 * @return */ @Override public String checkSaveCode(String com, String currentDir, String destFile, String saveCode) { FileMessage fileMsg; String realSaveCode; destFile = getRealDest(currentDir,destFile); if (com.equals("md") || com.equals("create")) if(!destFile.equals("/main")) destFile = destFile.substring(0, destFile.lastIndexOf('/')); try { fileMsgMap = fileMsgBean.getFileMsgMap(); fileMsg = fileMsgMap.get(destFile); if (fileMsg == null) return "notexist"; realSaveCode = fileMsg.getSaveCode(); if (saveCode.equals(realSaveCode)) return "success"; } catch (Exception e) { e.printStackTrace(); } return "error"; } //****************************************操作文件属性******************************// /** * 改变文件的保护码 * @param currentDir 当前目录 * @param destFile 待改变保护码的文件 * @param saveCode 文件的保护码 * @return 操作结果信息 */ @Override public String changeSaveCode(String currentDir, String destFile, String saveCode) { String flag = null; FileMessage fileMsg; destFile = getRealDest(currentDir,destFile); try { fileMsgMap = fileMsgBean.getFileMsgMap(); fileMsg = fileMsgMap.get(destFile); if (fileMsg == null) { flag = "notexist"; } else { fileMsg.setSaveCode(saveCode); fileMsgMap.put(destFile, fileMsg); fileMsgBean.saveFileMsgMap(fileMsgMap); } } catch (Exception e) { flag = "error"; } return flag; } /** * 把文件属性信息加入到Map容器中 * @param fileName 文件名(包括路径) * @param saveCode 保存码 */ private void putIntoFileMsgMap(String fileName, String userName, String saveCode) { FileMessage fileMsg = new FileMessage(); fileMsg.setFileName(fileName); fileMsg.setUserName(userName); fileMsg.setSaveCode(saveCode); fileMsgMap.put(fileName, fileMsg); } /** * 把文件属性信息从Map容器中移出 * @param fileName */ private void outFileMsgMap(String fileName, String flag) { if (flag.equals("empty")) fileMsgMap.remove(fileName); else { Set<String> fileNames = fileMsgMap.keySet(); Set<String> tempFileNames = new HashSet<String>(fileNames); for (String file : tempFileNames) { if (file.startsWith(fileName)) fileMsgMap.remove(file); } } } /** * * @param flag1 标记创建或者删除的标志 * @param filePath 文件路径 * @param flag2 标记删除文件时的信息 */ private void operateFileMsgmap(String flag1, String filePath, String flag2) { try { fileMsgMap = fileMsgBean.getFileMsgMap(); if (flag1.equals("new")) putIntoFileMsgMap(filePath, userName, userName); else outFileMsgMap(filePath, flag2); fileMsgBean.saveFileMsgMap(fileMsgMap); } catch (Exception e) { e.printStackTrace(); } } /** * 获取操作文件的绝对路径 * @param currentDir 当前所在的目录 * @param dest 用户输入的路径 * @return */ private String getRealDest(String currentDir,String dest){ if (dest.charAt(0) != '/') { dest = currentDir + "/" + dest; } return dest; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -