C#(或python)递归文件目录并存在字典中,能提供思路不管什么语言都可以
想递归查找指定目录下全部文件和文件夹,并生成如下格式的字典数据格式
{ "label":"文件夹1",
"children":[
{
"label":"文件1"
},
{
"label":"文件夹2",
"children":[
{"label":"文件2"}
]
}
]
}
自己试了很久总会有问题,百度上面都是直接字符串打印到txt文件下。
回答:
因为什么语言都可以,我这边提供一个java的吧。
思路就是创建一个目录类,里面有label
和children
两个字段,前者为名称,后者为List。
每次递归创建这个目录类,存放信息。
public static void main(String[] args) { String path = "C:\\Users\\(----)\\Desktop\\新建文件夹";
Catalog catalog = traversalDirectory(path, new Catalog());
System.out.println(new Gson().toJson(catalog));
}
static Catalog traversalDirectory(String path, Catalog catalog) {
File file = new File(path);
if (file.exists()) {
catalog.setLabel(file.getName());
File[] files = file.listFiles();
if (null == files || files.length == 0) {
return new Catalog();
} else {
for (File file2 : files) {
Catalog info = new Catalog();
if (file2.isDirectory()) {
traversalDirectory(file2.getAbsolutePath(), info);
}
info.setLabel(file2.getName());
catalog.getChildren().add(info);
}
}
}
return catalog;
}
目录类:
static class Catalog { private String label;
private List<Catalog> children = new ArrayList<>();
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public List<Catalog> getChildren() {
return children;
}
public void setChildren(List<Catalog> children) {
this.children = children;
}
}
输出:
{"label":"新建文件夹","children":[{"label":"1","children":[]},{"label":"2","children":[{"label":"新建文本文档.txt","children":[]}]}]}
{ "label":"新建文件夹",
"children":[
{
"label":"1",
"children":[
]
},
{
"label":"2",
"children":[
{
"label":"新建文本文档.txt",
"children":[
]
}
]
}
]
}
回答:
private static SelfDirInfo GetDirInfo(string path) {
if (!Directory.Exists(path))
return default;
DirectoryInfo directoryInfo = new DirectoryInfo(path);
var result = GetDirInfo(directoryInfo);
return result;
}
private static SelfDirInfo GetDirInfo(DirectoryInfo directoryInfo)
{
var result = new SelfDirInfo()
{
Lable = directoryInfo.Name,
Childen = directoryInfo.GetDirectories()?.Select(p => GetDirInfo(new DirectoryInfo(p.FullName)))?.ToList()
};
return result;
}
class SelfDirInfo
{
public string Lable { get; set; }
public List<SelfDirInfo> Childen { get; set; }
}
class SelfFileInfo
{
public string Label { get; set; }
}
回答:
c#代码
public static Catalog TraversalDirectory(string path, Catalog catalog) {
DirectoryInfo file = new DirectoryInfo(path);
if (file.Exists)
{
catalog.setLabel(file.Name);
FileSystemInfo[] files = file.GetFileSystemInfos();
if(files==null || files.Length == 0)
{
return new Catalog();
}
else
{
foreach(FileSystemInfo file2 in files)
{
Catalog info = new Catalog();
if(Directory.Exists(file.FullName))
{
TraversalDirectory(file2.FullName, info);
}
info.setLabel(file2.Name);
catalog.getChildren().Add(info);
}
}
}
return catalog;
}
以上是 C#(或python)递归文件目录并存在字典中,能提供思路不管什么语言都可以 的全部内容, 来源链接: utcz.com/a/159730.html