【问题标题】:copyInputStreamToFile method does not existcopyInputStreamToFile 方法不存在
【发布时间】:2016-05-24 22:22:32
【问题描述】:

我正在尝试在我的代码中使用 copyInput 方法,但似乎 Intellij 告诉我该方法不存在

FileUtils.copyInputStreamToFile(response.getEntity().getContent(), 下载文件);

我正在使用这里的代码

http://ardesco.lazerycode.com/index.php/2012/07/how-to-download-files-with-selenium-and-why-you-shouldnt/

但是这里好像有这个方法

https://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/FileUtils.html

我正在使用 maven,我尝试了 2.0、2.1、2.4 没有运气

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.2</version>
    </dependency>

Java 1.8

这是错误信息

错误:(201, 22) java: 找不到符号 符号:方法 copyInputStreamToFile(java.io.InputStream,java.io.File) 位置:类 org.apache.commons.io.FileUtils

【问题讨论】:

  • 完整、准确的错误信息是什么?
  • 您使用的是哪个版本的 Apache commons.io
  • @Andreas 我已经编辑了问题,您可以查看更多详细信息
  • 显然您使用了错误版本的FileUtils。但这不是火箭科学,你可以用大约五行 Java 自己编写。
  • 您是否可能以某种方式收到了不正确的 commons-io 版本?例如,您是否使用一些代理来获取 Maven 依赖项?最新的 IntelliJ IDEA 包含一个反编译器,当您 ctrl+单击进入 FileUtils 时,它将自动用于显示代码。如果您选中此项,您可以验证 FileUtils 确实包含该方法。或者,您可以通过在本地存储库中找到它来验证下载的 jar 本身(通常在 ~/.m2/repository 下)。

标签: java maven file-io


【解决方案1】:

您的类路径中可能还有另一个(较旧的)org.apache.commons.io.FileUtils,它可以解释您遇到的问题。您的一个依赖项很可能在类路径上有一个旧的 org.apache.commons:commons-io 工件。由于 groupId 的不同,Maven 将它们视为不同的工件并将它们放在类路径中。

如果确实发生了这种情况,您可以通过向引用旧 commons-io 的依赖项添加 exclusion 来明确禁止 maven 包含此传递依赖项(即使它以传递方式依赖它):

<dependency>
  <groupId>offending.artifact.groupId</groupId>
  <artifactId>offending.artifact.artifactId</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-io</artifactId>
    </exclusion>
  </exclusions>
</dependency>

【讨论】:

  • 要在 IntelliJ IDEA 中查找违规类:菜单 > 导航 > 类 > 键入 FileUtils >(可能需要选择“包含非项目文件”)。这将向您显示类路径上可用的FileUtils 类的列表,包括包含它的(可能是传递的)依赖项。如果您已经知道它肯定来自 org.apache.commons:commons:io,则可以检查 dependency:tree 以查找哪些依赖项可传递地引用它,尽管也可以使用 IntelliJ maven 相关功能来做到这一点。
【解决方案2】:

FileUtils.copyInputStreamToFile(inputStream,file);

此功能可用于大于两 (2) 的版本。您需要将此行添加到 gradle:

implementation 'org.apache.directory.studio:org.apache.commons.io:2.4'

【讨论】:

  • FileUtils.copyInputStreamToFile(inputStream,file) 是用org.apache.commons.io 编写的,因此有必要包含该库。 +1
【解决方案3】:

使用菜单选项“在 IntelliJ IDEA 中查找有问题的类:菜单 > 导航 > 类 > 键入 FileUtils”,我能够看到错误的版本,有 4 个 FileUtils,

我在 jar 文件中导入了正确的版本,它解决了问题,谢谢@Anton。

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,但似乎我有旧版本的 commons-io。我通过在 pom.xml 文件中将版本更改为 2.6 来修复它。

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 2018-05-16
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多