📄 virtualdata.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 + -