2013-05-16 18 views
6

Sto lavorando a come compilare java da linea di comando al momento. Ecco quello che ho:java.nio.file non esiste

Ecco quello che ho:

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

} 

Sto compilando questo con javac -d bin -sourcepath -src src/a_pack/HelloWorld.java e questo funziona bene.

Ora la mia comprensione è che, poiché HelloWorld.java fa riferimento agli altri pacchetti nelle sue istruzioni di importazione, javac va a compilarli. E immagino che per tutti i pacchetti java, javac li abbia internamente o qualcosa del genere.

In ogni caso - se aggiungo la seguente linea di importazione per HelloWorld.java

import java.nio.file.Files;

non riesce con

 

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 

Qual è la storia qui? Perché alcuni pacchetti Java sono buoni e altri no?

+2

NIO è stato introdotto in Java 7. Quale versione di Java sta utilizzando? – Reimeus

+0

@Reimeus Il JDK che sto usando che contiene javac è jdk1.6.0_32. – dwjohnston

+0

C'è la tua risposta. È necessario eseguire l'aggiornamento a JDK 7. – Reimeus

risposta

14

Java NIO è stato introdotto in Java 7. compilatori dalle versioni precedenti di JDK verrà esitano a qualsiasi codice che contiene queste classi NIO. È necessario eseguire l'aggiornamento a JDK 7 o versioni successive.

0

La classe File è costituita solo da metodi statici. Non sono sicuro se questo è il motivo per cui non può essere importato, ma significa che non ha bisogno di essere importato.

Modifica: ho appena realizzato che il pacchetto specificato è import java.nio.files.Files. Il pacchetto attuale è java.nio.file.Files; http://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary.html

+0

Le mie scuse, è stato un errore di battitura da parte mia. Il problema rimane ancora. – dwjohnston

1

Mi sono imbattuto in questo problema e ho trovato la mia variabile di ambiente JAVA_HOME che puntava ancora al vecchio java 1.6.

  • Esecuzione javac -version mostrato 1.7
  • Esecuzione java -version ha mostrato 1,7

ecc ...

Sulla rimozione di quella variabile ambiente, le cose compilati bene.

3

Se siete su OSX, quindi controllare il JDK si sta usando ...

$ 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 

Come si può vedere CurrentJDK sta indicando la versione errata. Puoi aggiustarlo sostituendo il link simbolico.

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

merito va a this blog post che mi ha salvato 5min di correre dtrace.