Java 将文件系统从路径列表保存到sql数据库

Java 将文件系统从路径列表保存到sql数据库,java,sql-server,data-structures,filesystems,Java,Sql Server,Data Structures,Filesystems,我在ArrayList中有一个文件路径列表,如下所示: /a/b/file1 /a/b/file2 /a/b/file3 /a/b/file4 /b/d/file5 /e/c/file6 public class FileData { public String id; public String name; public String path; // store parent of this file or folder. If value i

我在
ArrayList
中有一个文件路径列表,如下所示:

/a/b/file1
/a/b/file2
/a/b/file3
/a/b/file4
/b/d/file5
/e/c/file6
  public class FileData {
     public String id;
     public String name;
     public String path;

     // store parent of this file or folder. If value is null, mean file/folder in root
     public String parentId; 

     public boolean isFolder;
  }
然后我将它们映射到pojo中,如下所示:

/a/b/file1
/a/b/file2
/a/b/file3
/a/b/file4
/b/d/file5
/e/c/file6
  public class FileData {
     public String id;
     public String name;
     public String path;

     // store parent of this file or folder. If value is null, mean file/folder in root
     public String parentId; 

     public boolean isFolder;
  }
下面是它的数据库模式:

 FileData

 id | name | path | parent_id | is_folder
 1  | file1|  /b  |    2      |  false
 2  |  b   |  /a  |    3      |  true
 3  |  a   |  /   |    null   |  true

我想知道有没有什么快速的方法可以将上面的
ArrayList
解析成具有子-父关系的
ArrayList
,然后保存到数据库中?

下面是创建一个ArrayList()的程序的实现,您可以将其存储到数据库中

import java.io.*;
import java.util.*;

class Main {

  public static class FileData {
    public String id;
    public String name;
    public String path;

    // store parent of this file or folder. If value is null, mean file/folder in root
    public String parentId; 

    public boolean isFolder;
  }

  public static void main(String[] args) {
    ArrayList<String> filePaths = new ArrayList<String>();

    // inserting some dummy values
    filePaths.add("/a/b/file1");
    filePaths.add("/a/b/file2");
    filePaths.add("/a/b/file3");
    filePaths.add("/a/b/file3");
    filePaths.add("/a/b/file4");
    filePaths.add("/b/d/file5");
    filePaths.add("/e/c/file6");

    HashMap<String, Integer> pathId = new HashMap<>();

    HashMap<String, Integer> mCheck = new HashMap<>();

    ArrayList<FileData> fileDataSql = new ArrayList<>();

    int cntId = 1;

    for(String s:filePaths) {
      String[] sSplit = s.split("/");
      for(int i=1; i<sSplit.length; i++) {
        if(!pathId.containsKey(sSplit[i])) {
          pathId.put(sSplit[i], cntId);
          cntId++;
        }
        FileData fileDataObj = new FileData();
        fileDataObj.id = Integer.toString(pathId.get(sSplit[i]));
        fileDataObj.name = sSplit[i];

        // Here I am checking if this is the first element or not, if yes then it has null parentId and / as path
        if(i == 1) {
          fileDataObj.parentId = "null";
          fileDataObj.path = "/";
        } else {
          fileDataObj.parentId = Integer.toString(pathId.get(sSplit[i-1]));
          fileDataObj.path = "/" + sSplit[i-1];
        }

        if(i == sSplit.length-1) {
          fileDataObj.isFolder = false;
        } else {
          fileDataObj.isFolder = true;
        }
        if(!mCheck.containsKey(sSplit[i])) {
          mCheck.put(sSplit[i], 1);
          fileDataSql.add(fileDataObj);
        }
      }
    }

    for(FileData obj : fileDataSql) {
      System.out.println(obj.id + " " + obj.name + " " + obj.path + " " + obj.parentId + " " + obj.isFolder);
    }
  }
}
import java.io.*;
导入java.util.*;
班长{
公共静态类FileData{
公共字符串id;
公共字符串名称;
公共字符串路径;
//存储此文件或文件夹的父级。如果值为null,则表示根目录中的文件/文件夹
公共字符串parentId;
公用文件夹;
}
公共静态void main(字符串[]args){
ArrayList filepath=新的ArrayList();
//插入一些伪值
filepath.add(“/a/b/file1”);
filepath.add(“/a/b/file2”);
filepath.add(“/a/b/file3”);
filepath.add(“/a/b/file3”);
filepath.add(“/a/b/file4”);
添加(“/b/d/file5”);
添加(“/e/c/file6”);
HashMap pathId=新的HashMap();
HashMap mCheck=新的HashMap();
ArrayList fileDataSql=新的ArrayList();
int-cntId=1;
用于(字符串s:文件路径){
字符串[]sSplit=s.split(“/”);

对于(int i=1;我听说过使用诸如Hibernate之类的ORM工具吗?顺便说一句,我不遵循您的输出表。它也可以在数据库端完成。您使用的是哪种DBMS。@TimBiegeleisen我只是更新我的问题以澄清它。问题是我需要将列表文件路径解析为list
FileData
对象的方法,该对象具有ild-父关系。我可以通过以下方式将此列表保存到数据库中:myself@Prdp嗯,我的问题是,我需要将列表文件路径解析为具有子-父关系的列表文件数据对象,我可以自己处理数据库保存。难道你不能用“/”运算符拆分字符串,然后最后一个元素将始终是文件值吗will have is_folder=false和它成为父对象之前的任何元素。让我稍后尝试一下这个问题……给我一个小时的时间,现在不要靠近我的笔记本电脑。谢谢,我更新了你的代码一点,它工作了。我只想用递归来解决这个问题