如何在 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 路径读取文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在模块化的 java 11 应用程序中动态加载 Libreoffice jar,而不从自定义类加载器中获取 ClassCastException
如何在没有 pushd 的情况下获取 UNC 路径上的文件大小?