如何在不知道 java.nio.file 文件名的情况下检查 Java 中的文件夹大小或包含文件?

How to check folder size or containing files in Java without knowing the file name with java.nio.file?

前段时间我也有类似的问题。现在我没有任何具体的文件名,因为它是一个 预处理器脚本 。所以我需要检查文件列表的文件大小或特定路径的大小。

具体路径的解决方案是:

    var filePath = "//path//to//some//folder//file.name";
    try{
        var fileContent = java.nio.file.Files.size(java.nio.file.Paths.get(filePath));
        var fileSize = fileContent / 1048576;
        logger.debug("Filesize in MB: " + fileSize);
    }
    catch(e){
    ...

我已经尝试过的:

java.io.File(filePath).length();

这里的大小与文件夹中的实际大小不符。

java.nio.file.Files.list(filePath);

这里我得到了一个 java.util.stream.ReferencePipeline$Head@... 我不知道如何在欢乐中读出来

也许任何人都可以帮助我或向我展示另一种解决方案来在处理之前检查文件大小,而无需在 Java 版本“1.8.0._92”和 Windows Server 2012R2 环境中读取文件?

尝试使用

 import java.nio.channels.FileChannel;
FileChannel fileChannel = FileChannel.open(filePath);
        long fileSize = fileChannel.size();

您可以使用流对目录中所有文件的大小求和:

        long total = Files
           .list(Paths.get("c:/some/path/"))
           .mapToLong(p -> p.toFile().length())
           .sum();
        System.out.println(total);

编辑:以上原答案在Java。在 Mirth javascript 中它看起来像这样:

        var total = java.nio.file.Files
           .list(java.nio.file.Paths.get("c:/some/path/"))
           .mapToLong(function(p) {return p.toFile().length()})
           .sum();
        channelMap.put('total', total);

找到满足我需求的解决方案(在 Mirth 3.4.2.8129 上测试)Java 版本“1.8.0._92”和Windows Server 2012R2 环境

    // Modify the message variable below to pre process data
    var folderPath = "C:////path//to//some//folder";
    var folder = new Packages.java.io.File(folderPath);
    var listOfFiles = folder.listFiles();
    var count = listOfFiles.length;

    for (i=0; i<count; i++){
        var ext = listOfFiles[i];
        if (ext.toString().endsWith(".name")){ //filter by extentions e.g. .xml
            var file = listOfFiles[i];
            var filestr = file.toString().replace("\","//"); //adjust for UNC
            var fileSize = java.nio.file.Files.size(java.nio.file.Paths.get(filestr)) / 1048576;
            if (fileSize > 10){
                ChannelUtil.stopChannel(channelId); //stop channel if needed
                throw "File " + file + " is > "+ "10 MB" 
            }
        }
    }
    return message;

如果从不同的服务器读取,必须允许 Mirth 服务器(用户)从 (UNC) 路径读取