1+ import java .util .ArrayList ;
2+ import java .util .Collections ;
3+ import java .util .HashMap ;
4+ import java .util .List ;
5+ import java .util .Map ;
6+
7+ public class Solution588 {
8+ static class FileSystem {
9+ private final File root ;
10+
11+ public FileSystem () {
12+ root = new File ();
13+ }
14+
15+ public List <String > ls (String path ) {
16+ File f = root ;
17+ List <String > files = new ArrayList <>();
18+ if (!path .equals ("/" )) {
19+ String [] dirs = path .split ("/" );
20+ for (int i = 1 ; i < dirs .length ; i ++) {
21+ f = f .files .get (dirs [i ]);
22+ }
23+ if (f .isFile ) {
24+ files .add (dirs [dirs .length - 1 ]);
25+ return files ;
26+ }
27+ }
28+ files = new ArrayList <>(f .files .keySet ());
29+ Collections .sort (files );
30+ return files ;
31+ }
32+
33+ public void mkdir (String path ) {
34+ File f = root ;
35+ String [] dirs = path .split ("/" );
36+ for (int i = 1 ; i < dirs .length ; i ++) {
37+ if (!f .files .containsKey (dirs [i ])) {
38+ f .files .put (dirs [i ], new File ());
39+ }
40+ f = f .files .get (dirs [i ]);
41+ }
42+ }
43+
44+ public void addContentToFile (String filePath , String content ) {
45+ File f = root ;
46+ String [] dirs = filePath .split ("/" );
47+ for (int i = 1 ; i < dirs .length - 1 ; i ++) {
48+ f = f .files .get (dirs [i ]);
49+ }
50+ if (!f .files .containsKey (dirs [dirs .length - 1 ])) {
51+ f .files .put (dirs [dirs .length - 1 ], new File ());
52+ }
53+ f = f .files .get (dirs [dirs .length - 1 ]);
54+ f .isFile = true ;
55+ f .content = f .content + content ;
56+ }
57+
58+ public String readContentFromFile (String filePath ) {
59+ File f = root ;
60+ String [] dirs = filePath .split ("/" );
61+ for (int i = 1 ; i < dirs .length - 1 ; i ++) {
62+ f = f .files .get (dirs [i ]);
63+ }
64+ return f .files .get (dirs [dirs .length - 1 ]).content ;
65+ }
66+
67+ // 字典树 使用统一的文件夹文件列表
68+ private static class File {
69+ boolean isFile = false ;
70+ Map <String , File > files = new HashMap <>();
71+ String content = "" ;
72+ }
73+ }
74+ }
75+ /*
76+ $588. 设计内存文件系统
77+ https://leetcode.cn/problems/design-in-memory-file-system/
78+
79+ 设计一个内存文件系统,模拟以下功能:
80+ 实现文件系统类:
81+ - FileSystem() 初始化系统对象
82+ - List<String> ls(String path)
83+ - 如果 path 是一个文件路径,则返回一个仅包含该文件名称的列表。
84+ - 如果 path 是一个目录路径,则返回该目录中文件和 目录名 的列表。
85+ 答案应该 按字典顺序 排列。
86+ - void mkdir(String path) 根据给定的路径创建一个新目录。给定的目录路径不存在。如果路径中的中间目录不存在,您也应该创建它们。
87+ - void addContentToFile(String filePath, String content)
88+ - 如果 filePath 不存在,则创建包含给定内容 content的文件。
89+ - 如果 filePath 已经存在,将给定的内容 content附加到原始内容。
90+ - String readContentFromFile(String filePath) 返回 filePath下的文件内容。
91+ 注意:
92+ 1 <= path.length, filePath.length <= 100
93+ path 和 filePath 都是绝对路径,除非是根目录 ‘/’ 自身,其他路径都是以 ‘/’ 开头且 不 以 ‘/’ 结束。
94+ 你可以假定所有操作的参数都是有效的,即用户不会获取不存在文件的内容,或者获取不存在文件夹和文件的列表。
95+ 你可以假定所有文件夹名字和文件名字都只包含小写字母,且同一文件夹下不会有相同名字的文件夹或文件。
96+ 1 <= content.length <= 50
97+ ls, mkdir, addContentToFile, and readContentFromFile 最多被调用 300 次
98+
99+ 字典树 使用统一的文件夹文件列表
100+ */
0 commit comments