我有这样的路径列表
/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
因此,从这个路径列表(Stings)中,我需要创建一个Java Tree结构,该结构以文件夹作为节点,文件作为叶(不会有空文件夹作为叶)。
我需要的是add方法,我将一个String(文件的路径)传递给他们,然后将其添加到树中的正确位置,以创建正确的节点(文件夹)(如果尚未存在)
当我在节点上和叶子列表时,这种树结构将需要我获取节点列表(但我认为这将是树的正常功能)
我将始终将字符串作为路径,而不是真实的文件或文件夹。是否准备好使用某些东西或启动源代码?
非常感谢你。
谢谢您的回答。我做了我的工作实施。我认为我将需要对其进行改进,以使其在向树结构添加元素时具有更多缓存,从而更好地工作。
正如我所说的,我需要的是一种结构,可以让我对FS进行“虚拟”再现。
MXMTree.java
public class MXMTree {
MXMNode root;
MXMNode commonRoot;
public MXMTree( MXMNode root ) {
this.root = root;
commonRoot = null;
}
public void addElement( String elementValue ) {
String[] list = elementValue.split("/");
// latest element of the list is the filename.extrension
root.addElement(root.incrementalPath, list);
}
public void printTree() {
//I move the tree common root to the current common root because I don't mind about initial folder
//that has only 1 child (and no leaf)
getCommonRoot();
commonRoot.printNode(0);
}
public MXMNode getCommonRoot() {
if ( commonRoot != null)
return commonRoot;
else {
MXMNode current = root;
while ( current.leafs.size() <= 0 ) {
current = current.childs.get(0);
}
commonRoot = current;
return commonRoot;
}
}
}
MXMNode.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MXMNode {
List<MXMNode> childs;
List<MXMNode> leafs;
String data;
String incrementalPath;
public MXMNode( String nodeValue, String incrementalPath ) {
childs = new ArrayList<MXMNode>();
leafs = new ArrayList<MXMNode>();
data = nodeValue;
this. incrementalPath = incrementalPath;
}
public boolean isLeaf() {
return childs.isEmpty() && leafs.isEmpty();
}
public void addElement(String currentPath, String[] list) {
//Avoid first element that can be an empty string if you split a string that has a starting slash as /sd/card/
while( list[0] == null || list[0].equals("") )
list = Arrays.copyOfRange(list, 1, list.length);
MXMNode currentChild = new MXMNode(list[0], currentPath+"/"+list[0]);
if ( list.length == 1 ) {
leafs.add( currentChild );
return;
} else {
int index = childs.indexOf( currentChild );
if ( index == -1 ) {
childs.add( currentChild );
currentChild.addElement(currentChild.incrementalPath, Arrays.copyOfRange(list, 1, list.length));
} else {
MXMNode nextChild = childs.get(index);
nextChild.addElement(currentChild.incrementalPath, Arrays.copyOfRange(list, 1, list.length));
}
}
}
@Override
public boolean equals(Object obj) {
MXMNode cmpObj = (MXMNode)obj;
return incrementalPath.equals( cmpObj.incrementalPath ) && data.equals( cmpObj.data );
}
public void printNode( int increment ) {
for (int i = 0; i < increment; i++) {
System.out.print(" ");
}
System.out.println(incrementalPath + (isLeaf() ? " -> " + data : "") );
for( MXMNode n: childs)
n.printNode(increment+2);
for( MXMNode n: leafs)
n.printNode(increment+2);
}
@Override
public String toString() {
return data;
}
}
Test.java测试代码
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
String slist[] = new String[] {
"/mnt/sdcard/folder1/a/b/file1.file",
"/mnt/sdcard/folder1/a/b/file2.file",
"/mnt/sdcard/folder1/a/b/file3.file",
"/mnt/sdcard/folder1/a/b/file4.file",
"/mnt/sdcard/folder1/a/b/file5.file",
"/mnt/sdcard/folder1/e/c/file6.file",
"/mnt/sdcard/folder2/d/file7.file",
"/mnt/sdcard/folder2/d/file8.file",
"/mnt/sdcard/file9.file"
};
MXMTree tree = new MXMTree(new MXMNode("root", "root"));
for (String data : slist) {
tree.addElement(data);
}
tree.printTree();
}
}
如果您有关于即兴创作的好建议,请告诉我:)
所以我必须使用Java文件树系统,因为。由于某些原因,listfiles文件在通过远程网络时速度非常慢。但是,所有Java文件树系统示例都列出了子目录中的所有文件,这严重降低了程序的速度。如何使它只搜索目录,并返回该目录中的文件夹和文件名,而不返回子目录。 示例代码: 如有任何见解或帮助,将不胜感激,谢谢。
我有一个带有子目录的目录,其中包含各种大小的文件。我想复制一个特定的文件,并立即用所有文件替换它。 例如我有:C:\Folder\Sub_Folder\file1.extC:\Folder\Sub_Folder\file2.ext 我想制作“random_file.ext”的副本,然后将所有副本替换为上面提到的具有原始名称的文件file1.extfile2.ext这样random_file.ext
问题内容: 我需要从给定目录获取文件及其父目录的路径,但不包括它。 因此,例如,如果给我的方法指定path:作为路径,它将返回该目录及其下所有文件的路径。 因此,如果有子文件夹:,并且每个包含,则该方法的结果将是2个字符串,其中包含和 并且如果在其中有一个目录,该目录中有,则为该文件创建的字符串将为,并且如果还有其他子目录可以继续。 我的想法是我只想要文件上方的目录路径,而不是绝对路径,因此只希望
问题内容: 我一直在努力解决这个问题,所以也许有些人可以帮助我。我有一个带有完整路径的文件列表(这些只是文件 在另一台机器上的字符串),例如: 我想创建一个Jtree来显示目录结构,如下所示: I’ve been spliting the string on the seperator so I end up with a list of arrays like: 现在,我想一次为它们添加一个索引
问题内容: 在这个话题上有很多困惑。已经提出了几个问题。事情似乎仍然不清楚。ClassLoader,绝对文件路径等 假设我有一个项目目录结构, 我在“ lib / txt”目录中有一个资源说“ txtfile.txt”。我想以系统独立的方式访问它。我需要项目的绝对路径。所以我可以将路径编码为abspath +“ / lib / Dictionary / txtfile.txt” 假设我这样做 我得
我的代码: 我已经试过了,而不是。getFile(),extractJarFileFromURL或资源。getInputStream(),但所有这些都不起作用。当我打包项目并将其作为jar文件运行时,它试图打开以下文件,它总是返回以下消息。 错误: java.io.FileNotFoundException:类路径资源[资产/OPTIONS_DE. docx]无法解析为绝对文件路径,因为它不驻留在