Как проверить размер папки или содержащих файлы в Java, не зная имени файла с java .nio.file? - PullRequest
1 голос
/ 27 февраля 2020

У меня когда-то был похожий вопрос go. Теперь у меня нет определенного c имени файла, потому что это скрипт препроцессора . Поэтому мне нужно проверить размер файла списка файлов или размер указанного пути c.

решение с указанным путем c было:

    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?

Ответы [ 3 ]

2 голосов
/ 27 февраля 2020

Вы можете суммировать размеры всех файлов в каталоге, используя потоки:

        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);
0 голосов
/ 27 февраля 2020

нашел решение, которое соответствует моим требованиям (проверено на 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 (пользователю) должно быть разрешено чтение с (UN C) пути

0 голосов
/ 27 февраля 2020

Попробуйте использовать

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