제한된 수의 파일 시스템 작업을 지원하고 그에 따라 기능을 추가하는 미니 파일 시스템을 생성하는 임무가 있습니다.Java에서 미니 파일 시스템 만들기
나는 현재 excisting 디렉토리 또는 파일에 대한 링크를 만드는 작업 ln
을 구현하고 있습니다 (폴더 또는 파일에 대한 바로 가기를 만들고 다른 폴더에 넣는 것으로 생각하십시오).
내 생각은 포인터처럼 작동하는 INode 클래스에 ArrayList
을 추가하는 것이지만 액세스하는 방법을 생각할 수는 없습니다. 그게 아마도 내 새로운 객체를 추가하는 방법이라는 것을 깨달았습니다. 아예 ArrayList<INode> pointer
을 새로 작성하여 pointer.add(new INodeDirectory(paths[i]);
처럼 작동하지만 확실하지는 않을지 생각합니다. 그렇지 않으면 이것이 가장 좋은 방법 일 것입니다. 내가 몇 가지 포인터를 얻는다면 그것이 어떻게 될지 생각했다.
일부 관련 코드 :
package se.kth.id1020.minifs;
import edu.princeton.cs.introcs.StdOut;
import java.util.HashMap;
public class MiniFs implements FileSystem {
private final INodeDirectory root;
private HashMap<String,Integer> map = new HashMap<String, Integer>();
private int n = 0; //Number of objects created
public MiniFs() {
root = new INodeDirectory("/");
map.put("/",n);
}
//Create a directory/folder
@Override
public void mkdir(String path) {
String paths[] = path.split("/");
if(paths.length == 2){
INodeDirectory node = new INodeDirectory(paths[1]);
n++;
map.put(paths[1],n);
StdOut.println("OK.");
}
else{
for(int i = 1; i < paths.length; i++){
if(i == paths.length - 1){
if(map.containsKey(paths[i])){
StdOut.println("Directory already excists");
}
else{
INodeDirectory node = new INodeDirectory(paths[i]);
n++;
map.put(paths[i],n);
StdOut.println("OK.");
}
}
else if(map.containsKey(paths[i]) == false){
throw new UnsupportedOperationException("Error: you have to create " + paths[i] + " first!");
}
}
}
}
//Create a file
@Override
public void touch(String path) {
String paths[] = path.split("/");
if(paths.length == 2){
INodeFile node = new INodeFile(paths[paths.length - 1]);
n++;
map.put(paths[paths.length - 1], n);
StdOut.println("OK.");
}
else{
for(int i = 1; i < paths.length; i++){
if(i == paths.length - 1){
if(map.containsKey(paths[i])){
StdOut.println("File already excists");
}
else{
INodeFile node = new INodeFile(paths[i]);
n++;
map.put(paths[i],n);
StdOut.println("OK.");
}
}
else if(map.containsKey(paths[i]) == false){
throw new UnsupportedOperationException("You have to create " + paths[i] + " first!");
}
}
}
}
}
아이 노드 클래스 :
package se.kth.id1020.minifs;
public abstract class INode {
private String name;
private long accessTime;
public INode(String name) {
this.name = name;
this.accessTime = System.currentTimeMillis();
}
public long getAccessTime() {
return accessTime;
}
public void setAccessTime(long accessTime) {
this.accessTime = accessTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
INodeDirectory 클래스 :
package se.kth.id1020.minifs;
public class INodeDirectory extends INode {
public INodeDirectory(String name) {
super(name);
}
}
INodeFile 클래스 :
package se.kth.id1020.minifs;
public class INodeFile extends INode {
public INodeFile(String name) {
super(name);
}
}
적어도 간결한 대답을 원한다면 간결한 질문을 할 수 있습니다. 현재로서는 귀하의 질문이 SO와 잘 맞지 않습니다. – Durandal
@Durandal 예 나는 약간의 이별이있어, 이제 내 질문을 편집했다. 희망이 나아 졌어. – Necrozze