2013-05-16 12 views
6

Ich arbeite gerade aus, wie man Java von der Kommandozeile kompiliert. Hier ist, was ich habe:Paket java.nio.file existiert nicht

Hier ist, was ich habe:

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

Hello World:

 
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"); 
    } 

} 

Ich kompiliere dies mit javac -d bin -sourcepath -src src/a_pack/HelloWorld.java und das funktioniert gut.

Jetzt ist mein Verständnis, dass, weil die HelloWorld.java die anderen Pakete in ihren import-Anweisungen verweist, dann geht javac und kompiliert diese. Und ich vermute, dass für alle Java-Pakete, javac intern oder so etwas hat.

Wie dem auch sei - wenn ich die folgende Zeile importieren zu HelloWorld.java hinzufügen

import java.nio.file.Files;

es nicht mit

 

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 

Was hier die Geschichte ist? Warum sind einige Java-Pakete gut und manche nicht?

+2

NIO wurde in Java 7 eingeführt. Welche Version von Java verwenden? – Reimeus

+0

@Reimeus Das JDK, das ich benutze, das javac enthält, ist jdk1.6.0_32. – dwjohnston

+0

Da ist deine Antwort. Sie müssen auf JDK 7 aktualisieren. – Reimeus

Antwort

14

Java NIO wurde in Java 7 eingeführt. Compiler früherer Versionen des JDK werden mit jedem Code arbeiten, der diese NIO-Klassen enthält. Sie müssen auf JDK 7 oder höher aufrüsten.

0

Die Klasse Files besteht nur aus statischen Methoden. Ich bin mir nicht sicher, ob dies der Grund ist, warum es nicht importiert werden kann, aber es bedeutet, dass es nicht importiert werden muss.

Edit: Nur realisiert das Paket, das Sie angegeben haben, Import java.nio.files.Files. Das eigentliche Paket ist java.nio.file.Files;

+0

Ich entschuldige mich, das war ein Tippfehler meinerseits. Das Problem bleibt bestehen. – dwjohnston

1

Ich stieß auf dieses Problem und meine JAVA_HOME Umgebungsvariable zeigte immer noch auf das alte Java 1.6.

  • javac -version Rennen zeigte 1,7
  • Lauf java -version 1.7 zeigte

etc ...

Auf diese Umgebungsvariable zu entfernen, die Dinge zusammengestellt Ordnung.

3

Wenn Sie auf OSX, dann das JDK überprüfen Sie es unter Verwendung ...

$ 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 

Wie Sie sehen können CurrentJDK zeigt auf die falsche Version. Sie können das beheben, indem Sie den Symlink ersetzen.

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

Kredit geht an this blog post die mich dtrace 5min laufen gespeichert.

Verwandte Themen