⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 virtualdata.java

📁 NAS文件器的模拟
💻 JAVA
字号:
package fileSystem;

import java.io.*;
import java.text.*;
import java.util.*;

public class VirtualData {
	
	public static boolean creatDat (String name) {
		try {
			File f = new File(name + ".dat");
			f.createNewFile();
			return true;
		}catch(IOException e){
			return false;
		}
	}
	
	public static boolean deleteDat (String name) {
		try {
			File f = new File(name + ".dat");
			if (f.delete()) {
				return true;
			}
			else {
				return false;
			}			
		}catch(SecurityException e){
			return false;
		}catch (Exception e) {
			return false;
		}
	}
	
	public static boolean creatFileINode (int iNodeNumber, String fileName, 
			int block, int uid, int gid) {
		String file = "INode" + String.valueOf(iNodeNumber);
		creatDat(file);
		addAnInt(file, iNodeNumber);
		addALine(file, fileName);
		addAnInt(file, 1);
		addALine(file, new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()));
		addALine(file, new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()));
		addALine(file, "false");
		addAnInt(file, uid);
		addAnInt(file, gid);
		addALine(file, new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()));
		addAnInt(file, 0);
		addAnInt(file, block);
		return true;
	}
	
	public static boolean creatDirINode (int iNodeNumber, String name, int block) {
		String file = "INode" + String.valueOf(iNodeNumber);
		creatDat(file);
		addAnInt(file, iNodeNumber);
		addALine(file, name);
		addAnInt(file, 1);
		addALine(file, new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()));
		addALine(file, new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()));
		addALine(file, "true");
		addAnInt(file, block);
		return true;
	}
	
	public static boolean addALine (String name, String line) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile(name + ".dat", "rws");
			raf.seek(raf.length());
			raf.writeUTF(line);
			raf.close();
			return true;
		}catch(Exception e){
			return false;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static boolean addAnInt (String name, int i) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile(name + ".dat", "rws");
			raf.seek(raf.length());
			raf.writeInt(i);
			raf.close();
			return true;
		}catch(Exception e){
			return false;
		}finally {
			try {        
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static int countOfItem (int block) {
		int i = 0;
		RandomAccessFile awf = null;
		try {
			awf = new RandomAccessFile("DataBlock" +
					String.valueOf(block)+ ".dat", "rws");
			while(true) {
				awf.readUTF();
				awf.readInt();
				i = i+1;
			}
		}catch (EOFException e) {
			return i;
		}catch (Exception e) {
			return 0;
		}finally {
			try {       
		      awf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static boolean addAnItem (int block, String name, int i) {
		String fileName = "DataBlock" + String.valueOf(block);
		if ((!addALine(fileName, name)) || !(addAnInt(fileName, i))){
			return false;
		}
		return true;
	}
	
	public static boolean removeAnItem (int block, String name) {
		RandomAccessFile awf = null;
		try {
			awf = new RandomAccessFile("DataBlock" +
					String.valueOf(block)+ ".dat", "rws");
			awf.seek(0);		
			while(true) {
				long pointer1 = awf.getFilePointer();
				String get = awf.readUTF();
				if (get.equals(name)) {
					awf.seek(pointer1);
					awf.readUTF();
					awf.readInt();
					long pointer2 = awf.getFilePointer();	
					while (pointer2 != awf.length()){
						awf.seek(pointer2);						
						String s = awf.readUTF();						
						int b = awf.readInt();	
						long temp = pointer2;
						pointer2 = awf.getFilePointer();
						awf.seek(pointer1);
						awf.writeUTF(s);
						awf.writeInt(b);
						pointer1 = pointer1 + pointer2 - temp;
					}
					awf.setLength(pointer1);					
					break;
				}
				awf.readInt();
			}		
			awf.close();
			return true;
		}catch (Exception e) {
			return false;
		}finally {
			try {      
		      awf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	//dirINode
	public static int getBlockInINode (int iNodeNumber) {
		return getBlockInINode(iNodeNumber, 1);
	}
	
	//dirINode
	public static int getBlockInINode (int iNodeNumber, int i) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("INode" + 
					String.valueOf(iNodeNumber) + ".dat", "rws");
			raf.readInt();
			raf.readUTF();
			raf.readInt();
			raf.readUTF();
			raf.readUTF();
			if(!raf.readUTF().equals("true")){
				raf.readInt();
				raf.readInt();
				raf.readUTF();
				raf.readInt();
			}
			int b = -1;
			for (int a = 0; a < i; a++){
				b = raf.readInt();
			}
			raf.close();
			return b;
		}catch(Exception e){
			return -1;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static int getINodeInCat (int block, String name) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("DataBlock" + String.valueOf(block)+ ".dat", "rws");
			for (String s = raf.readUTF(); !s.equals(name); s = raf.readUTF()) {
				raf.readInt();
			}
			int i = raf.readInt();			
			raf.close();
			return i;
		}catch(Exception e){
			return -1;
		}finally {
			try {       
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static boolean isDir (int iNodeNumber) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("INode" + 
					String.valueOf(iNodeNumber) + ".dat", "rws");
			raf.readInt();
			raf.readUTF();
			raf.readInt();
			raf.readUTF();
			raf.readUTF();
			if (raf.readUTF().equals("true")){
				raf.close();
				return true;
			}
			else {
				raf.close();
				return false;
			}
		}catch(Exception e){
			return false;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static boolean setNewAccessTime (int iNodeNumber) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("INode" + 
					String.valueOf(iNodeNumber) + ".dat", "rws");
			raf.readInt();
			raf.readUTF();
			raf.readInt();
			raf.readUTF();
			raf.writeUTF(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()));
			raf.close();
			return true;
		}catch(Exception e){
			return false;
		}finally {
			try {       
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static boolean setNewAmendTime (int iNodeNumber) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("INode" + 
					String.valueOf(iNodeNumber) + ".dat", "rws");
			raf.readInt();
			raf.readUTF();
			raf.readInt();
			raf.readUTF();
			raf.readUTF();
			raf.readUTF();
			raf.readInt();
			raf.readInt();
			raf.writeUTF(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()));
			raf.close();
			return true;
		}catch(Exception e){
			return false;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static boolean setNewSize (int iNodeNumber, int size) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("INode" + 
					String.valueOf(iNodeNumber) + ".dat", "rws");
			raf.readInt();
			raf.readUTF();
			raf.readInt();
			raf.readUTF();
			raf.readUTF();
			raf.readUTF();
			raf.readInt();
			raf.readInt();
			raf.readUTF();
			long point = raf.getFilePointer();
			int old = raf.readInt();
			raf.seek(point);
			raf.writeInt(old + size);
			raf.close();
			return true;
		}catch(Exception e){
			return false;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static boolean setNewName (int iNodeNumber, String newName) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("INode" + 
					String.valueOf(iNodeNumber) + ".dat", "rws");
			int id = raf.readInt();
			raf.readUTF();
			String name = newName;
			int connect = raf.readInt();
			String creat_time = raf.readUTF();
			String access_time = raf.readUTF();
			String isDir = raf.readUTF();
			int uid = raf.readInt();
			int gid = raf.readInt();
			String amend_time = raf.readUTF();
			int size = raf.readInt();
			int block = raf.readInt();
			raf.setLength(0);
			raf.writeInt(id);
			raf.writeUTF(name);
			raf.writeInt(connect);
			raf.writeUTF(creat_time);
			raf.writeUTF(access_time);
			raf.writeUTF(isDir);
			raf.writeInt(uid);
			raf.writeInt(gid);
			raf.writeUTF(amend_time);
			raf.writeInt(size);
			raf.writeInt(block);
			raf.close();
			return true;
		}catch(Exception e){
			return false;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static int getNextINode (String name) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile(name + ".dat", "rws");
			int i = 0;
			while (raf.readInt() != 0){
				i = i + 1;
			}
			raf.close();
			return i;
		}catch(EOFException e){
			return -1;
		}catch(Exception e){
			return -1;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static int getNextBlock (String name) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile(name + ".dat", "rws");
			int i = 1;
			while (raf.readInt() != 0){
				i = i + 1;
			}
			raf.close();
			return i;
		}catch(EOFException e){
			return -1;
		}catch(Exception e){
			return -1;
		}finally {
			try {    
			      raf.close();    
			    }    
			    catch(Exception e){}    
		}
	}
	
	public static boolean setINodeBlock (int i, int b, String iNodeName, String blockName, int delete) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile(iNodeName + ".dat", "rws");
			for (int a = 0; a < i; a++) {
				raf.readInt();
			}
			raf.writeInt(delete);
			raf = new RandomAccessFile(blockName + ".dat", "rws");
			for (int a = 1; a < b; a++) {
				raf.readInt();
			}
			raf.writeInt(delete);
			raf.close();
			return true;
		}catch(EOFException e){
			return false;
		}catch(Exception e){
			return false;
		}finally {
			try {    
			      raf.close();    
			    }    
			    catch(Exception e){}    
		}
	}
	
/*	public static void print (int db) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("DataBlock" + 
					String.valueOf(db) + ".dat", "rws");
			while(true) {
				System.out.println(raf.readUTF());
				System.out.println(raf.readInt());
			}
		}catch(EOFException e){
			
		}catch(Exception e){
			
		}finally {
			try   
		    {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}*/
	
	public static ClientID getID(String fileName, String name, String password) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile(fileName + ".dat", "rws");
			while(true) {
				String n = raf.readUTF();
				String p = raf.readUTF();
				if (name.equals(n) && password.equals(p)) {
					return new ClientID(raf.readInt(), raf.readInt());
				}
				else {
					raf.readInt();
					raf.readInt();
				}
			}
		}catch(EOFException e){
			return null;
		}catch(Exception e){
			return null;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
	
	public static boolean checkGID(int iNodeNumber, int gid) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("INode" + String.valueOf(iNodeNumber) + ".dat", "rws");
			raf.readInt();
			raf.readUTF();
			raf.readInt();
			raf.readUTF();
			raf.readUTF();
			raf.readUTF();
			raf.readInt();
			if (gid == raf.readInt()) {
				return true;
			}
			else {
				return false;
			}
		}catch(Exception e){
			return false;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}
		}
	}
	
	public static boolean checkID(int iNodeNumber, int uid, int gid) {
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile("INode" + String.valueOf(iNodeNumber) + ".dat", "rws");
			raf.readInt();
			raf.readUTF();
			raf.readInt();
			raf.readUTF();
			raf.readUTF();
			raf.readUTF();
			int u = raf.readInt();
			int g = raf.readInt();
			if (uid == u && gid == g) {
				return true;
			}
			else {
				return false;
			}
		}catch(Exception e){
			return false;
		}finally {
			try {    
		      raf.close();    
		    }    
		    catch(Exception e){}    
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -