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我只是更新我的问题以澄清它。问题是我需要将列表文件路径解析为listFileData
对象的方法,该对象具有ild-父关系。我可以通过以下方式将此列表保存到数据库中:myself@Prdp嗯,我的问题是,我需要将列表文件路径解析为具有子-父关系的列表文件数据对象,我可以自己处理数据库保存。难道你不能用“/”运算符拆分字符串,然后最后一个元素将始终是文件值吗will have is_folder=false和它成为父对象之前的任何元素。让我稍后尝试一下这个问题……给我一个小时的时间,现在不要靠近我的笔记本电脑。谢谢,我更新了你的代码一点,它工作了。我只想用递归来解决这个问题