gpt4 book ai didi

java - 当目标路径是目录时,Files.newInputStream() 的无关紧要的行为?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:39 28 4
gpt4 key购买 nike

注意:请运行下面的确切代码;不要对其进行改编,特别是不要使用 File,因为此错误与新的 java.nio.file API

相关

好吧,这不是一个真正的“需要答案的问题”,而是一个需要证人的电话……

场景:

  • 在你的操作系统上有一个目录,不管它是什么,你知道你有访问权限——用 Unix 的说法,你至少有读取权限(这意味着你可以列出其中的条目);在下面的代码中,假设 System.getProperty("java.io.tmpdir") 表示的路径符合要求;
  • 安装了 Oracle JDK 或 OpenJDK 7+;这样您就可以使用 java.nio.file

现在,下面的代码做的很简单:它尝试 open a new InputStream on this directory using Files.newInputStream() .代码(也可用 here ;添加了我的评论):

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public final class Main
{
public static void main(final String... args)
throws IOException
{
final Path path = Paths.get(System.getProperty("java.io.tmpdir"));
try (
final InputStream in = Files.newInputStream(path); // FAIL_OPEN
) {
final byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buf)) != -1) // FAIL_READ
System.out.printf("%d bytes read\n", bytesRead);
}
}
}

好的,现在当您运行该代码时,以下 JRE/OS 组合会发生这种情况:

  • Linux x86_64、Oracle JDK 1.8.0_25:IOException(是一个目录) at FAIL_READ
  • Linux x86_64、Oracle JDK 1.7.0_72:IOException(是一个目录) at FAIL_READ
  • Mac OS X x86_64、Oracle JDK 1.8.0_25:IOException(是一个目录) at FAIL_READ
  • Windows 7、Oracle JDK 1.8.0_25:AccessDeniedExceptionFAIL_OPEN (!!)。

老实说,我不知道如何处理那段代码。正如我在介绍中所说,我正在寻找证人。我肯定会就此向 OpenJDK 打开一个错误,它看起来很严重。我还向 nio-dev 邮件列表发送了有关此问题的邮件。

好吧,至于我有一个问题:JDK 中的 IsDirectoryException 怎么样(继承 FileSystemException)?我实际上已经在 one of my projects 中定义了它来解决这样的问题。我不确定为什么“Java 家伙”没有考虑这个问题......

最佳答案

我的观察(抱歉,这里没有其他系统 atm,稍后我可能会添加 ARM):

  • JDK 1.8.0_25,Linux x86_64:java.io.IOException:是一个目录 at //FAIL_READ

我同意这种行为是意外的,首先应该不可能从目录创建 InputStream。 我建议您将此作为错误归档。即使 Files.newInputStream 没有明确说明,该行为也与 API 的其余部分不一致。

关于java - 当目标路径是目录时,Files.newInputStream() 的无关紧要的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327783/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com