包java.nio.file不存在

时间:2013-05-16 01:52:53

标签: java eclipse packages javac

我正在研究如何从命令行编译java。这就是我所拥有的:

这就是我所拥有的:

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

的HelloWorld:

package a_pack;

import b_pack.Inner;
import b_back.Inner2;
import java.util.ArrayList; 
import java.util.Iterator; 

public class HelloWorld {

    public static void main(String[] args) {

        System.out.println("Hello, World");     

        Inner myInner = new Inner(); 
        myInner.myInner(); 

        Inner2 myInner2 = new Inner2();
        myInner2.myInner(); 


        ArrayList myArray = new ArrayList(); 
        myArray.add(1); 
        myArray.add(2); 
        myArray.add(3); 

        Iterator itr = myArray.iterator();
        while (itr.hasNext())
        {
            System.out.println(itr.next()); 
        }

    }

}

Inner.java

package b_pack; 

public class Inner {

    public void myInner() {
        System.out.println("Inner Method");
    }

}

Inner2.java

package b_pack; 

public class Inner2 {

    public void 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: package java.nio.file does not exist
import java.nio.file.Files;
                    ^
1 error

这里的故事是什么?为什么有些java包很好而有些却没有?

4 个答案:

答案 0 :(得分:15)

Java 7中引入了

Java NIO。早期版本的JDK编译器将对包含这些NIO类的任何代码进行监视。您需要升级到JDK 7或更高版本。

答案 1 :(得分:3)

如果您使用的是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,这为我节省了5分钟dtrace

答案 2 :(得分:1)

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

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

等...

在删除该环境变量时,事情编译得很好。

答案 3 :(得分:0)

Files类只包含静态方法。我不确定这是不是为什么不能导入它,但它确实意味着它不需要导入。

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