import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class FileManager {
public Map<String, FileWay> AllFiles = new HashMap<String, FileWay>();
private int[] Fat = new int[128];
private FileWay root = new FileWay("root", 1);
private FileWay nowCatalog = root;
public FileManager() {
for (int i = 0; i < Fat.length; i++) {
Fat[i] = 0;
}
Fat[1] = 255;//255表示磁盘块已经被占用
Fat[0] = 126;//记录磁盘剩余块数
root.setUpper(root);
AllFiles.put("root", root);
}
public int setFat(int size) {
int[] startNum = new int[128];
int i = 2;
for (int j = 0; j < size; j++) {
if (Fat[i] == 0) {
startNum[j] = i;
if (j > 0) {
Fat[startNum[j - 1]] = i;
}
j++;
}
}
Fat[i - 1] = 225;
return startNum[0];
}
public void deleteFat(int startNum) {
int nextPoint = Fat[startNum];
int nowPoint = startNum;
int count = 0;
while (Fat[nowPoint] != 0) {
nextPoint = Fat[nowPoint];
if (nextPoint == 225) {
Fat[nowPoint] = 0;
count++;
break;
} else {
Fat[nowPoint] = 0;
count++;
nowPoint = nextPoint;
}
}
Fat[0] += count;
}
public void changeFat(int startNum, int add) {
int nowPoint = startNum;
int nextPoint = Fat[startNum];
while (Fat[nowPoint] != 255) {
nowPoint = nextPoint;
nextPoint = Fat[nowPoint];
}
for (int i = 2, count = 0; count < add; i++) {
if (Fat[i] == 0) {
Fat[nowPoint] = i;
nowPoint = i;
count++;
Fat[nowPoint] = 255;
}
}
}
public void showFile() {
System.out.println("***************** < " + nowCatalog.getName() + " > *****************");
if (!nowCatalog.subMap.isEmpty()) {
for (FileWay value : nowCatalog.subMap.values()) {
if (value.getWay() == 3) { //目录文件
System.out.println("文件名 : " + value.getName());
System.out.println("操作类型 : " + "文件夹");
System.out.println("起始盘块 : " + value.getAddress());
System.out.println("大小 : " + value.getSize());
System.out.println("<-------------------------------------->");
} else if (value.getWay() == 2) {
System.out.println("文件名 : " + value.getName() + "." + value.getType());
System.out.println("操作类型 : " + "可读可写文件");
System.out.println("起始盘块 : " + value.getAddress());
System.out.println("大小 : " + value.getSize());
System.out.println("<-------------------------------------->");
}
}
}
for (int i = 0; i < 2; i++)
System.out.println();
System.out.println("磁盘剩余空间 :" + Fat[0] + " " + "退出系统请输入exit");
System.out.println();
}
public void createFile(String name, String type, int size) {
if (Fat[0] >= size) {
FileWay value = nowCatalog.subMap.get(name);
if (value != null) {
if (value.getWay() == 3) {
int startNum = setFat(size);
FileWay file = new FileWay(name, type, startNum, size);
file.setUpper(nowCatalog);
nowCatalog.subMap.put(file.getName(), file);
AllFiles.put(file.getName(), file);
Fat[0] -= size;
System.out.println("创建文件成功");
showFile();
} else if (value.getWay() == 2) {
System.out.println("创建失败,该文件已存在");
showFile();
}
} else if (value == null) { //若无同名文件或文件夹,继续创建文件
int startNum = setFat(size);
FileWay file = new FileWay(name, type, startNum, size);
file.setUpper(nowCatalog);
nowCatalog.subMap.put(name, file);
AllFiles.put(file.getName(), file);
Fat[0] -= size;
System.out.println("创建文件成功!");
showFile();
}
} else {
System.out.println("创建文件失败,磁盘空间不足!");
}
}
public void createCatolog(String name) {
if(Fat[0] >= 1) { //判断磁盘空间是否足够创建文件夹
FileWay value = nowCatalog.subMap.get(name); //判断该目录下是否存在同名目录或文件
if(value != null) {
if(value.getWay() == 2) {
int startNum = setFat(1);
FileWay catalog = new FileWay(name, startNum);
catalog.setUpper(nowCatalog);
nowCatalog.subMap.put(name, catalog);
Fat[0]--;
AllFiles.put(catalog.getName(), catalog);
System.out.println("创建目录成功!");
showFile();
} else if(value.getWay() == 3) {
System.out.println("创建目录失败,该目录已存在!");
showFile();
}
} else if(value == null) {
int startNum = setFat(1);
FileWay catalog = new FileWay(name, startNum);
catalog.setUpper(nowCatalog); //纪录上一层目录
nowCatalog.subMap.put(name, catalog);
Fat[0]--;
AllFiles.put(catalog.getName(), catalog);
System.out.println("创建目录成功!");
showFile();
}
} else {
System.out.println("创建目录失败,磁盘空间不足!");
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 基于java实现的银行家算法+作业调度算法源码.zip 基于java实现的银行家算法+作业调度算法源码.zip 基于java实现的银行家算法+作业调度算法源码.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于java实现的银行家算法+作业调度算法源码.zip (26个子文件)
介绍.md 57B
独占设备的分配与回收
独占设备的分配与回收.iml 433B
src
Equip.java 188B
Equipment.java 199B
文件管理
文件管理.iml 433B
src
FileManager.java 6KB
FileWay.java 2KB
高响应比优先作业调度算法
src
JiZhi.java 3KB
JCB.java 1KB
out
production
高响应比优先作业调度算法
JCB.class 1KB
JiZhi.class 3KB
高响应比优先作业调度算法.iml 433B
主存储器可变分区最先适应算法
src
JobNotFindException.java 139B
Job.java 235B
Table.java 458B
MemoryFullException.java 139B
MemoryManage.java 3KB
Test.java 1KB
out
production
主存储器可变分区最先适应算法
Test.class 2KB
MemoryManage.class 3KB
JobNotFindException.class 349B
MemoryFullException.class 349B
Job.class 421B
MemoryManage$1.class 837B
Table.class 848B
主存储器可变分区最先适应算法.iml 433B
共 26 条
- 1
资源评论
- ,,732024-03-13非常有用的资源,有一定的参考价值,受益匪浅,值得下载。
onnx
- 粉丝: 9444
- 资源: 5594
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功