Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java按顺序遍历目录_Java_File - Fatal编程技术网

使用Java按顺序遍历目录

使用Java按顺序遍历目录,java,file,Java,File,我从我的经理那里收到一个压缩格式的包,下面的文件路径结构将在解压缩后出现。这些文件必须按特定顺序复制到数据库 --DDL -----abc.sql --Table -----def.sql --Function -----ghi.sql --Stored Procedure -----jkl.sql -----mno.sql 要求是必须首先应用文件夹DDL的内容,然后应用表,然后应用函数,最后应用存储过程 有时只有两个文件夹,如下所示 --Function ----abc.sql --Stor

我从我的经理那里收到一个压缩格式的包,下面的文件路径结构将在解压缩后出现。这些文件必须按特定顺序复制到数据库

--DDL
-----abc.sql
--Table
-----def.sql
--Function
-----ghi.sql
--Stored Procedure
-----jkl.sql
-----mno.sql
要求是必须首先应用文件夹DDL的内容,然后应用表,然后应用函数,最后应用存储过程

有时只有两个文件夹,如下所示

--Function
----abc.sql
--Stored Procedure
----jkl.sql
----mno.sql
在这种情况下,最后也必须应用存储过程。无论提取的文件中有哪些文件夹,都无法更改顺序

如何用Java实现这一点?我已经用Python轻松地实现了这一点


注意:在这种情况下,考虑到每个目录中都有子目录和多个文件,是否可以混合使用filevisitor界面?

假设内容已经解压缩,我将以以下方式实现它:

  • 使用
    Files.walk()
    方法遍历整个目录

  • 只过滤掉SQL文件

  • 将路径映射到包含路径本身和目录优先级的类型,以便该类型可排序

  • 排序结果

  • 应用SQL

  • 总之

    final Path sourcePath = Paths.get("/tmp/extracted-sql-import-root/");
    try (Stream<Path> walk = Files.walk(sourcePath)) {
    
      walk.filter(isSqlFile)
        .map(filePath -> new SqlFile(sourcePath, filePath))
        .sorted()
        .forEach(processSqlFile);
    
    } catch (IOException iOException) {
      // TODO handle exception
    }
    
    final Path sourcePath=Path.get(“/tmp/extracted sql import root/”;
    try(streamwalk=Files.walk(sourcePath)){
    walk.filter(isSqlFile)
    .map(文件路径->新建SqlFile(源路径,文件路径))
    .已排序()
    .forEach(processSqlFile);
    }捕获(IOException IOException){
    //TODO句柄异常
    }
    
    我没有使用FileVisitor,因为我假设您无法影响文件的访问顺序,并且 然后它变成双簧管,因为你关心的顺序

    链接到,我没有处理所有实际的边缘情况


    从我遗漏了SQL部分的算法来看,我想您只对文件处理感兴趣。

    @Renatolvancic感谢您提供的代码片段:),但如何运行此程序?我建议您查看关于如何从命令行或IDE示例中运行java应用程序的其他答案: