简单文件系统的实现java_简单的文件系统设计

该博客介绍了如何使用Java设计一个简单的文件系统,包括文件对象、用户对象和主目录对象的实现。用户可以进行创建、删除、打开、关闭、读取和写入文件等操作,并通过文件保护码实现权限控制。示例代码展示了文件操作的流程。

实验三

文件系统设计实验

. 实验目的

用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

二、实验要求

要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。

程序采用二级文件目录(即设置主目录[MFD],包括用户名和指向文件目录的指针)和用户文件目录(UFD,即文件目录,包括文件名,保护码,文件长度等)。另外,为打开文件设置了运行文件目录(AFD,文件执行读命令或写命令之前,把相关文件目录信息调入AFD)。在执行读写命令时,需改读写指针,。

文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。

程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD)、打开文件目录(AFD)(即运行文件目录)

M D F

用户名

文件目录指针

U F D

文件名

保护码

文件长度

A F D

打开文件名

打开保护码

读写

指针

实现:

1.定义好文件对象

public

class File {

private int[] rwx = new int[3];// 安全标记

private java.io.File file ;

public

String getRwx() {

return

Integer.toString(rwx[0])+Integer.toString(rwx[1])+Integer.toString(rwx[2]);

}

public

File({

this.file = file;

this.setRwx(rwx);

}

public

File({

this.file = file;

this.setRwx(rwx);

}

public

void setRwx(int[] rwx) {

this.rwx = rwx;

}

public

void setRwx(String rwx) {

this.rwx[0]=Integer.parseInt(String.valueOf(rwx.charAt(0)));

this.rwx[1]=Integer.parseInt(String.valueOf(rwx.charAt(1)));

this.rwx[2]=Integer.parseInt(String.valueOf(rwx.charAt(2)));

}

public

boolean CanRead() {

if

(this.rwx[1] == 1) {

return

true;

}

return

false;

}

public

boolean CanWrite() {

if

(this.rwx[1] == 1) {

return

true;

}

return

false;

}

public

boolean CanXing() {

if

(this.rwx[1] == 1) {

return

true;

}

return

false;

}

public

{

return

this.file;

}

public

void setFile( {

this.file = file;

}

}

2.用户对象

import java.util.ArrayList;

public class User {

private String username;// 用户名

private ArrayList filefold= new ArrayList();//用户目录

private int foldsize=10;// 目录大小

public User(){}

public User(String username){

this.username = username;

java.io.File ff = new

;

//这是在windows下,若操作系统为linux,可改为/user/下建用户目录。

ff.mkdir();

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public int getFoldsize() {

return foldsize;

}

public void setFoldsize(int foldsize) {

this.foldsize = foldsize;

}

//添加文件

public void addFile(File file){

filefold.add(file);

}

//清空目录

public void remove(){

this.filefold.removeAll(filefold);

java.io.File ff = new

;

ff.delete();

}

//删除文件

public void delFile(String filename){

java.io.File file1 = new

;

if(filefold.isEmpty())return;

for(int i=0;i

if(this.filefold.get(i).getFile().getName().equals(filename)){

this.filefold.remove(i);

}

}

file1.delete();

System.out.println("文件删除成功!");

}

public ArrayList getFilefold() {

return filefold;

}

public void setFilefold(ArrayList filefold) {

this.filefold = filefold;

}

//打印用户目录

public void display(){

if(filefold.isEmpty()){

System.out.println("目录为空!");

}

;

;

for({

if(f.isDirectory()){

System.out.println(temps.getName());

}

}

System.out.println();

}

}

3.主目录对象定义

import java.util.ArrayList;

public class MFD {

private int size=2;

private ArrayList list = new ArrayList();

public int getSize() {

return size;

}

public void setSize(int size) {

this.size = size;

}

public ArrayList getList() {

return list;

}

public void setList(ArrayList list) {

this.list = list;

}

//用户验证

public User Contains(String username){

for (User user : list) {

if(user.getUsername().equals(username)){

return user;

}

}

return null;

}

//刷新用户

public void flash(User user){

for (User us : list) {

if(us.getUsername()==user.getUsername()){

this.list.remove(us);

this.addUser(user);

}

}

}

//添加用户

public void addUser(User user){

if(Contains(user.getUsername())!=null)

{

System.out.println("该用户已存在!");

}else{

if(this.list.size()

this.list.add(user);

System.out.println("刷新成功!");

}else{

System.out.println("目录已满!");

}

}

}

//删除用户

public void delUser(String username){

//过滤空目录

if(this.list.isEmpty()){

System.out.println("目录为空!");

}

//检测文件是否存在

for (int i=0;i

if(this.list.get(i).getUsername().equals(username))

{

this.list.remove(i);

}else{

System.out.println("该用户不存在!");

}

}

}

}

4.模拟实现实现

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Scanner;

public class DemoImpl {

public static void main(String[] args) throws IOException

{

MFD mfd = new MFD();

mfd.setSize(4);//用户目录

Scanner scanner = new

Scanner(System.in);

System.out.print("新增用户:");

String username =

scanner.next();

User user1 = new

User(username);

int[] temp1 = {1,1,1};

int[] temp2 =

{0,0,0};

mfd.addUser(user1);

boolean flag =

true;//定义逻辑控制标记

while(flag){

System.out.print("请输入用户名:");

String name =

scanner.next();

if((mfd.Contains(name)==null)){

continue;

}

User user =

mfd.Contains(username);

while(flag){

System.out.println("1)新建文件");

System.out.println("2)删除文件");

System.out.println("3)打开文件");

System.out.println("4)修改文件权限");

System.out.println("5)读出文件");

System.out.println("6)写入文件");

System.out.println("7)关闭文件");

System.out.println("8)保存目录并打印");

System.out.println("0)退出");

System.out.print("请输入指令:

");

int target =

Integer.parseInt(scanner.next());

if(target<0||target>8){

System.out.println("输入有误(0-8):");

continue;

}

switch(target){

case 0:{

System.out.print("确定退出?(Y/N):");

String exit =

scanner.next();

if(exit.equals("Y")||exit.equals("y")){

flag = false;

System.out.println("已退出");

System.out.println();

user.remove();

break;

}else{

user.remove();

break;

}

}

case 1:{

System.out.print("请输入文件名:");

String filename =

scanner.next();

System.out.print("请输入文件保护码(读写执行)1表示允许,0表示不允许:");

String rwx =

scanner.next();

java.io.File filetemp =

new ;

filetemp.createNewFile();

File file = new

File(filetemp,rwx);

System.out.println("文件创建成功!");

user.addFile(file);

System.out.println();

break;

}

case 2:{

if(user.getFilefold().isEmpty()){

System.out.println("目录为空!");

}

System.out.println("当前目录:");

for (int i=0;i

System.out.println(user.getFilefold().get(i).getFile().getName()+"

权限"+user.getFilefold().get(i).getRwx());

}

System.out.print("请输入要删除的文件名:");

String filename =

scanner.next();

user.delFile(filename);

System.out.println();

break;

}

case 3:{

if(user.getFilefold().isEmpty()){

System.out.println("目录为空!");

}

System.out.println("当前目录:");

for (int i=0;i

System.out.println(i+"."+user.getFilefold().get(i).getFile().getNa

me()+"权限"+user.getFilefold().get(i).getRwx());

}

System.out.print("请选择要打开的文件:(输入index):");

String in =

scanner.next();

int index =

Integer.parseInt(in);

if(user.getFilefold().get(index).CanXing()){

System.out.println("将选中的文件放入AFD中");

System.out.println("正在打开文件.....");

FileInputStream is = new

FileInputStream(user.getFilefold().get(index).getFile());

int b = 0;

System.out.print("文件内容如下:\n");

while((b=is.read())!=-1){

System.out.print((char)b);

}

is.close();

}else{

System.out.println("没有该文件的运行权限");

}

System.out.println();

break;

}

case 4:{

if(user.getFilefold().isEmpty()){

System.out.println("目录为空!");

}

System.out.println("当前目录:");

for (int i=0;i

System.out.println(i+"."+user.getFilefold().get(i).getFile().getNa

me()+"权限"+user.getFilefold().get(i).getRwx());

}

System.out.print("请选择要修改权限的文件:(输入index):");

String in =

scanner.next();

int index =

Integer.parseInt(in);

System.out.print("请输入文件新的权限(RWX):");

String rwx =

scanner.next();

user.getFilefold().get(index).setRwx(rwx);

System.out.println("修改成功!");

System.out.println();

break;

}

case 5:{

if(user.getFilefold().isEmpty()){

System.out.println("目录为空!");

}

System.out.println("当前目录:");

for (int i=0;i

System.out.println(i+"."+user.getFilefold().get(i).getFile().getNa

me()+"权限"+user.getFilefold().get(i).getRwx());

}

System.out.print("请选择要读取的文件:(输入index):");

String in =

scanner.next();

int index =

Integer.parseInt(in);

if(user.getFilefold().get(index).CanXing()){

System.out.println("将选中的文件放入AFD中");

System.out.println("正在打开文件.....");

FileInputStream is = new

FileInputStream(user.getFilefold().get(index).getFile());

int b = 0;

System.out.print("文件内容如下:\n");

while((b=is.read())!=-1){

System.out.print((char)b);

}

is.close();

}else{

System.out.println("没有该文件的运行权限");

}

System.out.println();

break;

}

case 6:{

if(user.getFilefold().isEmpty()){

System.out.println("目录为空!");

}

System.out.println("当前目录:");

for (int i=0;i

System.out.println(i+"."+user.getFilefold().get(i).getFile().getNa

me()+"权限"+user.getFilefold().get(i).getRwx());

}

System.out.print("请选择要读取的文件:(输入index):");

String in =

scanner.next();

int index =

Integer.parseInt(in);

if(user.getFilefold().get(index).CanWrite()){

System.out.print("请输入要写入的内容:");

String content =

scanner.next();

FileOutputStream os =

new

FileOutputStream(user.getFilefold().get(index).getFile());

byte[] t = new

byte[1024];

t=content.getBytes();

os.write(t, 0,

t.length);

os.close();

System.out.println("将选中的文件放入AFD中,AFD的写指针指向选中文件");

System.out.println("正在写入文件。。。");

System.out.println("写入成功");

}else{

System.out.println("没有该文件的写入权限");

}

System.out.println();

break;

}

case 7:{

System.out.println("文件已关闭!");

break;

}

case 8:{

//打印目录

user.display();

break;

}

default:continue;

}

}

}

}

}

实验结果:

新增用户:gg

刷新成功!

请输入用户名:gg

1)新建文件

2)删除文件

3)打开文件

4)修改文件权限

5)读出文件

6)写入文件

7)关闭文件

8)保存目录并打印

0)退出

请输入指令: 1

请输入文件名:f.txt

请输入文件保护码(读写执行)1表示允许,0表示不允许:1111

文件创建成功!

1)新建文件

2)删除文件

3)打开文件

4)修改文件权限

5)读出文件

6)写入文件

7)关闭文件

8)保存目录并打印

0)退出

请输入指令: 8

f.txt

1)新建文件

2)删除文件

3)打开文件

4)修改文件权限

5)读出文件

6)写入文件

7)关闭文件

8)保存目录并打印

0)退出

请输入指令: 2

当前目录:

f.txt权限111

请输入要删除的文件名:f.txt

文件删除成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值