2

此问题适用于 Linux/Mac;如果将文件解压缩到 Windows 盒子上,我什至认为这些文件不会带有斜杠。

您好,我需要打开流行的 BRO IDS 系统输出的日志文件。这些文件是只读的,我需要在不更改文件名的情况下处理它们的内容。

出于某种原因,Bro 文件名采用以下格式:“conn.19/00/00-22/00/00.log”。(也是 .gz 版本,带有斜杠)我尝试在我的 Mac 上使用默认设置运行最新的 Bro 实例,它生成的日志文件具有相同的正斜杠模式,所以这是其他人做出的有意识的决定,我会必须解决。

在将文件作为 Java 单元测试加载时,通过

File("conn.19/00/00-22/00/00.log")

或通过网址

getClass().getClassLoader().getResource("conn.19/00/00-22/00/00.log")

我得到了正斜杠被解释为不存在目录的预期问题。

**我发现了一堆关于文件名中的斜线的其他被否决的问题,主要是由想要制造此类问题的人提出的。我正在寻找一种在 Java 中处理这些错误文件名的解决方案。

如果我可以将文件数据输入到 InputStream,我会很高兴。

更新 1:这作为更新比作为评论更有效,因为它改变了问题的性质。

我发现在 MacOS 和可能的 Linux 中,Finder GUI 应用程序显示带有正斜杠的文件名,如下所示:

MacOS Finder 中的 Bro 日志文件

但是在终端中我看到了这个:

终端中的兄弟日志文件

最后,File.list() 命令也这样解释它:

在此处输入图像描述

所以解决方案是在读取文件时使用冒号':'字符。原来这是一个兔子洞,可能涉及将':'编码为“%3a”或双重编码为​​“%253a”。在我的排列中,这些都没有起作用。

请参阅: JDK-7037120:java.net.URI 中的身份违规

访问文件名中带有冒号的存档文件会引发 NullPointerException 或 AssertionError

4

0 回答 0