如何使用Java.nio.file检查文件夹大小或包含Java文件而不知道文件名?

如何使用Java.nio.file检查文件夹大小或包含Java文件而不知道文件名?,java,mirth,java.nio.file,Java,Mirth,Java.nio.file,不久前我有一个类似的问题。现在我没有任何特定的文件名,因为它是一个预处理器脚本。因此,我需要检查文件列表的文件大小或特定路径的大小 具有特定路径的解决方案是: var filePath=“//path//to//some//folder//file.name”; 试一试{ var fileContent=java.nio.file.Files.size(java.nio.file.path.get(filePath)); var fileSize=fileContent/1048576; deb

不久前我有一个类似的问题。现在我没有任何特定的文件名,因为它是一个预处理器脚本。因此,我需要检查文件列表的文件大小或特定路径的大小

具有特定路径的解决方案是:

var filePath=“//path//to//some//folder//file.name”;
试一试{
var fileContent=java.nio.file.Files.size(java.nio.file.path.get(filePath));
var fileSize=fileContent/1048576;
debug(“文件大小(MB):+Filesize);
}
捕获(e){
...
我已经尝试过的:

java.io.File(filePath).length();
这里的大小与文件夹中的实际大小不匹配

java.nio.file.Files.list(filePath);
这里我得到一个java.util.stream.ReferencePipeline$Head@...我不知道如何在欢笑中读出来

也许有人可以帮助我或向我展示另一种解决方案,在处理之前检查文件大小,而不必在Java版本“1.8.0.\u 92”和Windows Server 2012R2环境中读取文件?

尝试使用

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

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

long total=文件
.list(path.get(“c:/some/path/”)
.mapToLong(p->p.toFile().length())
.sum();
系统输出打印项次(总计);
编辑:上面的原始答案是用Java编写的。在欢笑javascript中,它看起来像这样:

var total=java.nio.file.Files
.list(java.nio.file.path.get(“c:/some/path/”)
.mapToLong(函数(p){返回p.toFile().length()})
.sum();
channelMap.put('total',total);

找到了一个满足我需求的解决方案(在Mirth 3.4.2.8129上测试)、Java版本“1.8.0.\u 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;
//修改下面的消息变量以预处理数据
var folderPath=“C:///path///to//some//folder”;
var folder=newpackages.java.io.File(folderPath);
var listOfFiles=folder.listFiles();
var count=listOfFiles.length;
对于(i=0;i=10){
ChannelUtil.stopChannel(channelId);//如果需要,停止通道
抛出的“文件”+文件+”大于“+”10 MB
}
}
}
返回消息;

如果从不同的服务器读取,则必须允许Mirth服务器(用户)从(UNC)路径读取。谢谢,这可能是一种可行的方法。但是FileChannel.open将读取该文件吗?如果是这样的话,对我的情况来说,这不是一个好的解决方案。我想在处理之前测试大文件很遗憾,我当前的mirth/java版本不支持这一点。那么你应该把你的mirth和java版本放在原始文章中。如果不指定,通常假定您使用的是当前版本的mirth,至少是java 8。@th_lo请参见编辑。此解决方案至少适用于mirth 3.0+,如果您至少运行Java 7,则可能更旧。只有在windows上运行Java时,才能在UNC路径名上创建Java.io.File。