我有这样的路径列表
/mnt/sdcard/folder1/a/b/file1
/mnt/sdcard/folder1/a/b/file2
/mnt/sdcard/folder1/a/b/file3
/mnt/sdcard/folder1/a/b/file4
/mnt/sdcard/folder1/a/b/file5
/mnt/sdcard/folder1/e/c/file6
/mnt/sdcard/folder2/d/file7
/mnt/sdcard/folder2/d/file8
/mnt/sdcard/file9
Run Code Online (Sandbox Code Playgroud)
因此,从这个路径列表(Stings)我需要创建一个Java Tree结构,其中包含文件夹作为节点,文件作为leaf(不会将空文件夹作为叶子).
我需要的是我想的是add方法,我向它们传递一个String(文件的路径),然后将它添加到树中的正确位置,如果它们不在那里,则创建正确的节点(Folder)
当我在节点和叶子列表上时,这个树结构将需要我获取节点列表(但我认为这将是树的常规功能)
我总是将字符串作为路径而不是真正的文件或文件夹.是否有可以使用的东西或源代码开始?
非常感谢你.
嘿,我正在研究一个用python编写的高性能文件管理/分析工具包.我想创建一个函数,以树格式给我一个列表或类似的东西.像这个问题(java相关)
从:
dir/file
dir/dir2/file2
dir/file3
dir3/file4
dir3/file5
Run Code Online (Sandbox Code Playgroud)
注意:路径列表未排序
至:
dir/
file
dir2/
file2
file3
dir3/
file4
file5
[[dir, [file, [dir2, [file2]], file3]], [dir3, [file4, file5]]]
Run Code Online (Sandbox Code Playgroud)
这些方面的东西.我一直在玩一些想法,但没有一个提供我想要的速度.
注意:我已经有了路径列表,所以不用担心.该函数采用路径列表并给出树列表.
提前致谢
寻找从Android MediaStore获取音乐文件的文件夹路径以获取输入目录路径的方法.所以实际上问题是如何对MediaStore进行正确的查询.
这是一个例子.我目前的代码:
String dirPath="/mnt/sdcard/Music/";
String selection =MediaStore.Audio.Media.DATA +" like ?";
String[] projection = {MediaStore.Audio.Media.DATA};
String[] selectionArgs={dirPath+"%"};
Cursor cursor = this.managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
selectionArgs,
null);
List<String> songs = new ArrayList<String>();
while(cursor.moveToNext())
songs.add(cursor.getString(0));
Run Code Online (Sandbox Code Playgroud)
结果我们在songs列表中会像:
/mnt/sdcard/Music/song1.mp3
/mnt/sdcard/Music/song2.mp3
/mnt/sdcard/Music/FolderWithSongs/song3.mp3
/mnt/sdcard/Music/AnotherFolderWithSongs/song4.mp3
/mnt/sdcard/Music/AndOneMoreFolder/song5.mp3
/mnt/sdcard/Music/AndOneMoreFolder/song6.mp3
/mnt/sdcard/Music/AndOneMoreFolder/song7.mp3
/mnt/sdcard/Music/AndOneMoreFolder/SomeFolder/song8.mp3
/mnt/sdcard/Music/AndOneMoreFolder/SomeFolder/song9.mp3
Run Code Online (Sandbox Code Playgroud)
我实际上在寻找什么 - 从这样得到这样的DISTINCT一级嵌套路径列表dirPath:
/mnt/sdcard/Music/FolderWithSongs/
/mnt/sdcard/Music/AnotherFolderWithSongs/
/mnt/sdcard/Music/AndOneMoreFolder/
Run Code Online (Sandbox Code Playgroud)
如果这里将是当前文件夹文件 - /mnt/sdcard/Music/song1.mp3并且
/mnt/sdcard/Music/song2.mp3- 它也是可接受的.
有任何想法吗?
编辑 我发现了两种可能的解决方案: Android按文件夹列出音乐并播放它们 并从字符串路径列表构造树结构 ,但我认为更好的方法可以解决这个问题.
如果你有一个字符串路径数组,在Ruby中构建XML树的最佳方法是什么?
paths = [
"nodeA1",
"nodeA1/nodeB1/nodeC1",
"nodeA1/nodeB1/nodeC1/nodeD1/nodeE1",
"nodeA1/nodeB1/nodeC2",
"nodeA1/nodeB2/nodeC2",
"nodeA3/nodeB2/nodeC3"
]
xml =
<nodeA1>
<nodeB1>
<nodeC1>
<nodeD1>
<nodeE1/>
</nodeD1>
</nodeC1>
<nodeC2/>
</nodeB1>
<nodeB2>
<nodeC2/>
<nodeC3/>
</nodeB2>
</nodeA1>
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是将路径字符串拆分为一个数组,并将其深度和内容与前一个数组进行比较,但是如果我到达路径"nodeA1/nodeB1/nodeC1/nodeD1/nodeE1",当我回到"nodeA1/nodeB1/nodeC2",[1]节点是共同的祖先,但跟踪它是混乱的,至少我这样做的方式.
我也想让它递归,所以我可以在它自己的函数中处理每个嵌套级别,但还没有达到任何半通用的解决方案.
当你遇到这个问题时,你们常常做的任何想法或事情?
谢谢!长矛
有人可以给我一些指示吗 我想获取文件路径列表(仅字符串),然后转换为类似结构的层次树。因此,有两个任务,分析字符串以创建树,以及创建树或某种映射结构以将结果实际放入其中。(然后,第三个任务是解析树以在html中显示为树)
我正在使用Java 7,所以我假设我可以使用Paths来完成第一部分,但是却努力地找到一个清晰的算法。
C:\Music\Blur\Leisure
C:\Music\KateBush\WholeStory\Disc1
C:\Music\KateBush\WholeStory\Disc2
C:\Music\KateBush\The Kick Inside
C:\Music\KateBush\The Dreaming
C:\MusicUnprocessed\Blue\ParkLife
Run Code Online (Sandbox Code Playgroud)
所以它给
C:\
Music
Blur
Leisure
Kate Bush
Whole Story
Disc 1
Disc 2
The Kick Inside
The Dreaming
MusicProcessing
Blur
ParkLife
Run Code Online (Sandbox Code Playgroud) 我有一个自定义对象,其中包含返回根目录中所有目录和文件名的方法
string[] dirlist = obj.GetDirectories();
//which returns all dir names in root
string[] filelist = obj.GetFiles();
//which return all file names in root
Run Code Online (Sandbox Code Playgroud)
我无法修改这些方法.一旦我得到了dirlist,我如何获得其中所有子目录的列表以及子目录中的文件,忽略安全异常.它可以嵌套到多个级别..NET 4中有什么东西吗?
更新:string [] dirList也可以读作List dirlist.请提供一个使用.NET最新功能的解决方案
DirectoryOne
- SubDirOne
- SubDirTwo
- FileOne
- FileTwo
- SubDirThree
DirectoryTwo
DirectoryOne
Run Code Online (Sandbox Code Playgroud)