【问题标题】:package java.nio.file does not exist包 java.nio.file 不存在
【发布时间】:2013-05-10 18:39:33
【问题描述】:

我目前正在研究如何从命令行编译 java。这是我得到的:

这是我得到的:

/myjava/compile.cmd /myjava/src/a_pack/HelloWorld.java /myjava/src/b_pack/Inner.java /myjava/src/b_pack/Inner2.java /myjava/bin

你好世界:

包 a_pack; 导入 b_pack.Inner; 导入 b_back.Inner2; 导入 java.util.ArrayList; 导入 java.util.Iterator; 公共类 HelloWorld { 公共静态无效主要(字符串[]参数){ System.out.println("你好,世界"); 内部 myInner = new Inner(); myInner.myInner(); 内层2 myInner2 = 新内层2(); myInner2.myInner(); ArrayList myArray = new ArrayList(); myArray.add(1); myArray.add(2); myArray.add(3); 迭代器 itr = myArray.iterator(); 而 (itr.hasNext()) { System.out.println(itr.next()); } } }

Inner.java

包 b_pack; 公共类内部{ 公共无效 myInner() { System.out.println("内部方法"); } }

Inner2.java

包 b_pack; 公共类 Inner2 { 公共无效 myInner() { System.out.println("SecondInner"); } }

我正在用javac -d bin -sourcepath -src src/a_pack/HelloWorld.java 编译这个 这很好用。

现在我的理解是,因为 HelloWorld.java 在它的 import 语句中引用了其他包,所以 javac 去编译这些包。 而且我猜对于所有的java包,javac在内部都有它们或其他东西。

无论如何- 如果我将以下导入行添加到 HelloWorld.java

import java.nio.file.Files;

它失败了

D:\.....\myjava>javac -d bin -sourcepath src src/a_pack/HelloWo rld.java src\a_pack\HelloWorld.java:8: 包 java.nio.file 不存在 导入 java.nio.file.Files; ^ 1 个错误

这里有什么故事?为什么有些 java 包好有些不好?

【问题讨论】:

  • NIO 是在 Java 7 中引入的。使用的是什么版本的 Java?
  • @Reimeus 我使用的包含 javac 的 JDK 是 jdk1.6.0_32。
  • 这就是你的答案。您需要升级到 JDK 7。
  • @Reimeus 只是对 JDK 与 JRE 的澄清。我使用的javac属于JDK1.6.0,我明确定义了javac.exe的位置。但是java的版本(在我的电脑上使用java -version是1.7.0_07。那么它失败的原因是因为包不在JDK中吗?
  • 仅当您使用 Java 7 中引入的任何新类或语法时...

标签: java eclipse packages javac


【解决方案1】:

Java NIO 是在 Java 7 中引入的。来自 JDK 早期版本的编译器将阻止包含这些 NIO 类的任何代码。您需要升级到 JDK 7 或更高版本。

【讨论】:

    【解决方案2】:

    如果您在 OSX 上,请检查它正在使用的 JDK...

    $ cd /System/Library/Frameworks/JavaVM.framework/Versions
    $ readlink /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
    /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
    $ javac -version
    javac 1.7.0_25
    

    如您所见,CurrentJDK 指向错误的版本。 您可以通过替换符号链接来解决此问题。

    cd /System/Library/Frameworks/JavaVM.framework/Versions
    sudo ln -fs /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents CurrentJDK
    

    归功于this blog post,这让我节省了运行dtrace 5分钟的时间。

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,发现我的 JAVA_HOME 环境变量仍然指向旧的 java 1.6。

      • 运行 javac -version 显示 1.7
      • 运行 java -version 显示 1.7

      等等……

      删除该环境变量后,编译正常。

      【讨论】:

        【解决方案4】:

        Files 类仅包含静态方法。我不确定这是否是它无法导入的原因,但这确实意味着它不需要导入。

        编辑:刚刚意识到你指定的包是import java.nio.files.Files。实际的包是 java.nio.file.Files; http://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary.html

        【讨论】:

        • 抱歉,这是我的错字。问题依然存在。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-29
        • 2017-11-04
        • 2016-06-09
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多