我目前正在研究Gitlet,这是一个以Git为模型的版本控制系统。目前,我的提交存储在文件夹中,每个文件夹的提交ID都作为文件夹名称。如果尚未更改,则每个文件都需要“继承”到下一个提交,但是我无法将先前提交的内容复制到新提交中以节省空间。我通过在HashMap
中存储文件(键)及其路径(值)来实现此继承。每个提交都有自己的HashMap
,其中包含自己的继承文件。当用户添加文件时,截至目前,我刚刚发现我只考虑了用户实际位于找到文件的目录中的情况。我没有考虑用户是否在文件所在的目录之外。这带来了一个大问题,因为复制到hashmap的路径是<folder/folder2/file.txt = commits/3/folder/folder2/file.txt>
,当我实际上只是想要{ {1}}
是否有一种“简单”的方式我可以这样做,以便复制的唯一内容是实际的文件名而不是文件夹/ folder2?
我目前正在复制这样的文件:
<file.txt = commits/3/file.txt>
其中stagedQueue是 try {
String path = "./.gitlet/commits/" + commitID;
for (String file : stagedQueue) {
File temp = new File(path + file);
Files.copy((new File(file).toPath()),
(new File(path + "/" + file).toPath()));
}
} catch (IOException e) { //closes try and starts catch
e.printStackTrace();
} //closes catch
,其中包含用户添加的文件以包含在下一次提交中
答案 0 :(得分:1)
我不是100%正在寻找的东西,但如果你只想要文件名,那就是:
File().getName();
File().getPath();
然后你只需要玩一些游戏来获得正确的输出路径。