【发布时间】:2010-05-30 21:15:47
【问题描述】:
我需要搜索可能包含更多文件夹的文件夹列表, 并根据其父文件夹添加一个新文件夹。(路径存储为字符串,例如 =“root/MyCom/home/”)然后我用新文件夹名称填写一个字段并将其添加到最终文件夹(例如“家/”)。
如您所见,我可以导航到正确的位置并将新文件夹添加到当前文件夹,我的问题是我无法确保将 currentFolder 元素放回它来自的列表中
如何将文件夹添加到文件夹列表中,可以在文件夹列表中,也可以在文件夹列表中等等?
YFUser user = (YFUser)getSession().getAttribute(SESSION_USER);
Folder newFolder = new Folder();
newFolder.setFolderName(foldername);
// this is the path string (root/MyCom/home/) split in the different folder names
String folderNames[] = folderLocationString.split("/");
int folderNamesLength = folderNames.length;
Folder root = user.getRoot();
Folder currentFolder = root;
for(int i=0;i<folderNamesLength; i++){
// because root is folderNames[i]
String folderName = folderNames[i];
int currentFolderSize = currentFolder.getChildren.getSize();
for(int o=1; o<= currentFolderSize ; o++){
if(currentFolder.getChildren().get(o) instanceof Folder){
if(folderName.equals(currentFolder.getChildren().get(o).getFolderName())){
currentFolder = currentFolder.getChildren().get(o);
if (i == counter){
//now i am inside the correct folder and i add it to the list of folders within it
//the trouble is knowing how to re add this changed folder back to the list before it
currentFolder.getChildren.add(newFolder);
}
}
}
}
}
这是我需要做的简单版本
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
List<String> strings = new ArrayList<String>();
strings.add("Donkey");
strings.add("hello");
strings.add("me");
strings.add("you");
strings.add("everyone");
strings.add("not u");
int counter= strings.size();
for (int i=0 ; i< counter ; i++){
System.out.println(strings.get(i));
if(strings.get(i).equals("Donkey")){
strings.remove(i);
strings.add(i, "not a Donkey");
}
}
for(String s : strings){
System.out.println(s);
}
}
}
这将打印出驴,你好,我,你,每个人,而不是你
然后
不是驴子,你好,我,你,大家,不是你,
正如您在此处看到的,我将“驴”字符串替换为“不是驴”
所以就我的项目而言,我需要从列表中获取父文件夹,添加新文件夹,然后使用新的更新文件夹删除旧的父文件夹。
编辑:
这是我的文件夹类,它包含一个层次对象列表,可以是文件信息或文件夹,`
包 com.example.client;
@Entity
@DiscriminatorValue("F")
public class Folder extends Hierarchy {
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name = "FOLDER_JOIN_FILELOCATION", joinColumns = {
@JoinColumn(name = "folder_id") }, inverseJoinColumns = {
@JoinColumn(name = "file_information_id") })
private List<Hierarchy> children = new ArrayList<Hierarchy>() ;
@Column(name = "folder_name")
private String folderName;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinTable(name="FOLDER_JOIN_FOLDER",
joinColumns = @JoinColumn(name="parent_folder_id"),
inverseJoinColumns = @JoinColumn(name="folder_ID")
)
private Hierarchy parent;
public Folder(){
}
public String getFolderName() {
return folderName;
}
public void setFolderName(String folderName) {
this.folderName = folderName;
}
public List<Hierarchy> getChildren() {
return children;
}
public void setChildren(List<Hierarchy> children) {
this.children = children;
}
@Override
public void addChild(Hierarchy h) {
children.add(h);
}
public Hierarchy getParent() {
return parent;
}
public void setFolder(Hierarchy folder) {
this.parent = folder;
}
@Override
public String toString() {
String val = this.folderName;
val += "/";
for(Hierarchy h : children ){
val += h.toString();
}
return val;
}
public Hierarchy getChild(int index){
return children.get(index);
}
}
现在下面这个例子,当我取出列表的一个元素,编辑它,我认为彼得说这将直接编辑列表,但是当我运行这段代码时它不会
List<String> strings = new ArrayList<String>();
strings.add("Donkey");
strings.add("hello");
strings.add("me");
strings.add("you");
strings.add("everyone");
strings.add("not u");
int counter= strings.size();
for (int i=0 ; i< counter ; i++){
System.out.println(strings.get(i));
if(strings.get(i).equals("Donkey")){
String test = strings.get(i);
test += " not now though";
}
}
for(String s : strings){
System.out.println(s);
}
`
【问题讨论】:
标签: java gwt arraylist logic traversal