如何在 Java 中检查文件大小而不从 UNC 路径读取文件?

Posted

技术标签:

【中文标题】如何在 Java 中检查文件大小而不从 UNC 路径读取文件?【英文标题】:How to check filesize in Java without reading the file from an UNC Path? 【发布时间】:2019-09-11 14:45:45 【问题描述】:

我想知道如何在不通过 UNC 路径从两个不同的 Microsoft 服务器打开或读取文件的情况下检查 Java 中的文件大小? 它用于接口引擎过滤器功能。所以没有 html DOM 等可用。

现在有效的方法: API中有一个Util函数

java.nio.file.Files.size(java.nio.file.Paths.get('/path/to/file')

由于错误而无法在 UNC PATHS 上运行:

Wrapped java.nio.file.AccessDeniedException: \\server\folder\file.pdf

使用示例:

var filePath = msg['path'].toString();
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)
...

期望:一种通过 UNC 访问读取文件大小输出文件属性的方法

【问题讨论】:

您链接的文档是针对 Java API 而不是 javascript 的。 是的,你是对的。但连接器是用 javascript 编写的 您需要更新您的问题以反映您正在尝试通过 UNC 路径获取远程共享上的文件大小。应该删除 javascript 标记,因为在 mozilla rhino(mirth 使用)中没有针对此的纯 javascript 解决方案。您需要一个 Java 解决方案(这可能是一个重复的问题)并且转换为 mirth javascript 是微不足道的并且超出了范围这个问题。 您的 mirth 服务用户是否有权访问您尝试访问的共享和文件? 【参考方案1】:

由于您知道文件路径,您总是可以使用 java.io.File.length() 来返回文件的长度(以字节为单位)。即:

var filePath = msg['path'].toString();
// Validate that the filePath is indeed a file and it exists
var fileSize = Packages.java.io.File(filePath).length();

【讨论】:

我已经解决了这个问题:var filePath = msg['pfad'].toString(); var fileContent = java.nio.file.Files.size(java.nio.file.Paths.get(filePath)); 并且可以将它包装到一个 try try...catch 语句中,但现在我得到了:Wrapped java.nio.file.AccessDeniedException: \\server\folder\file.pdf 我在下面的论坛帖子中提到我给你的答案是针对本地文件,UNC 路径名支持仅适用于 Windows。该共享将以您运行 mirth 服务的用户身份访问,显然该用户需要访问该路径。 mirthcorp.com/community/forums/… 虽然这两种解决方案都有效,但 java.nio.file 包在无效时会提供更好的例外。

以上是关于如何在 Java 中检查文件大小而不从 UNC 路径读取文件?的主要内容,如果未能解决你的问题,请参考以下文章

在 SVN 中不提交行)而不从文件中删除它们?

如何在模块化的 java 11 应用程序中动态加载 Libreoffice jar,而不从自定义类加载器中获取 ClassCastException

如何在没有 pushd 的情况下获取 UNC 路径上的文件大小?

如何通过 django 代码从我的 linux pc 识别文本文件而不检查其扩展名和文件大小? [复制]

我可以创建从网络上的UNC路径复制文件的安装程序吗?

如何(快速)检查 UNC 路径是不是可用