¿Cómo ejecuto un programa Java desde la línea de comandos en Windows?

216

Estoy tratando de ejecutar un programa Java desde la línea de comandos en Windows. Aquí está mi código:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyFile
{
    public static void main(String[] args)
    {

        InputStream inStream = null;
        OutputStream outStream = null;

        try
        {

            File afile = new File("input.txt");
            File bfile = new File("inputCopy.txt");

            inStream = new FileInputStream(afile);
            outStream = new FileOutputStream(bfile);

            byte[] buffer = new byte[1024];

            int length;
            // copy the file content in bytes
            while ((length = inStream.read(buffer)) > 0)
            {

                outStream.write(buffer, 0, length);

            }

            inStream.close();
            outStream.close();

            System.out.println("File is copied successful!");

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

No estoy seguro de cómo ejecutar el programa, ¿alguna ayuda? ¿Es esto posible en Windows? ¿Por qué es diferente a otro entorno (pensé que JVM se escribía una vez, se ejecutaba en cualquier lugar)?

Elizabeth Turner
fuente
33
javac CopyFile.javay luegojava CopyFile
alfasin
Ahora estoy en la línea de comando, ¿necesito guardar mis archivos txt en la misma carpeta que el programa para que se invoquen?
Elizabeth Turner
¿Qué paquete CopyFilereside?
MadProgrammer
1
@Elizabeth Turner primero debe asegurarse de haber instalado JRE (Java Runtime Env) y de que es accesible desde cada carpeta (la ruta a Java / Javac se incluye en la variable PATH env). Luego ejecute los comandos que escribí anteriormente desde la misma carpeta en la que se encuentra CopyFile.java.
alfasin

Respuestas:

240

Fuente: javaindos.

Digamos que su archivo está en C: \ mywork \

Ejecutar símbolo del sistema

C:\> cd \mywork

Esto hace que C: \ mywork sea el directorio actual.

C:\mywork> dir

Esto muestra el contenido del directorio. Debería ver filenamehere.java entre los archivos.

C:\mywork> set path=%path%;C:\Program Files\Java\jdk1.5.0_09\bin

Esto le dice al sistema dónde encontrar programas JDK.

C:\mywork> javac filenamehere.java

Esto ejecuta javac.exe, el compilador. No debería ver más que el siguiente mensaje del sistema ...

C:\mywork> dir

javac ha creado el archivo filenamehere.class. Debería ver filenamehere.java y filenamehere.class entre los archivos.

C:\mywork> java filenamehere

Esto ejecuta el intérprete de Java. Entonces debería ver la salida de su programa.

Si el sistema no puede encontrar javac, verifique el comando set path. Si se ejecuta javac pero obtiene errores, verifique su texto Java. Si el programa se compila pero obtiene una excepción, verifique la ortografía y las mayúsculas en el nombre del archivo y el nombre de la clase y el comando java HelloWorld. ¡Java distingue entre mayúsculas y minúsculas!

Nicholas Kadaeux
fuente
27
El problema que tengo es que cuando intento ejecutar el compilador me sale un error "no se pudo encontrar o cargar la clase principal CopyFile
Elizabeth Turner
2
Si tiene la carpeta que contiene CopyFile.class establecida como el directorio actual, simplemente intente "java -cp. CopyFile" De lo contrario "java -cp FULLPATH CopyFile"
Nicholas Kadaeux
¿Cómo crearía un archivo por lotes que compila y ejecuta el código, pero si ya se compiló antes, solo ejecútelo?
Desarrollador de Android
2
Lo que falta: si se declaró que la clase está en un determinado paquete, entonces debe colocar el .classarchivo en la estructura de directorios adecuada. El directorio actual es el classpath predeterminado, por lo que no tiene que configurarlo -cp .manualmente.
Artur Czajka
2
Por supuesto, debe usar paquetes: package mypackage; luego vaya a su nombre de proyecto /. Ejecutar java mypackage.Main
chrips
108

Para completar la respuesta:

  1. El archivo Java

    TheJavaFile.java
  2. Compile el archivo Java en un archivo * .class

    javac TheJavaFile.java
    • Esto creará un TheJavaFile.classarchivo
  3. Ejecución del archivo Java

    java TheJavaFile
  4. Creación de un *.jararchivo ejecutable

    • Tienes dos opciones aquí:

      1. Con un archivo de manifiesto externo:

        • Cree el archivo de manifiesto say - MANIFEST.mf

        • El archivo MANIFEST no es más que una entrada explícita de la clase principal

        • jar -cvfm TheJavaFile.jar MANIFEST.mf TheJavaFile.class

      2. Ejecutable por punto de entrada:

        • jar -cvfe TheJavaFile.jar <MainClass> TheJavaFile.class
  5. Para ejecutar el archivo Jar

    java -jar TheJavaFile.jar
jkhosla
fuente
55
¿podría mostrar el contenido de MANIFEST.mf? porque cuando trato de "Ejecutable por punto de entrada" dice que no se puede encontrar la clase principal
Pini Cheyni
@Pini Cheyni Si su clase se llama MainClass, su archivo de manifiesto tendrá una entrada para Main-Class: MainClass
jkhosla
@PiniCheyni, Las 2 formas de crear frascos ejecutables se explican bien aquí. docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Dinesh Kumar P
en el punto 3, cuando llamas java TheJavaFileeso es equivalente a java TheJavaFile.class... así que no estás ejecutando el archivo java como dijiste. Estás ejecutando el archivo de clase. los archivos Java son fuentes que no son ejecutables
user2914191
21

En caso de que su clase Java esté en algún paquete. Supongamos que su clase Java llamada ABC.javaestá presente encom.hello.programs , entonces necesita ejecutarla con el nombre del paquete.

Compílalo de la forma habitual:

C:\SimpleJavaProject\src\com\hello\programs > javac ABC.java

Pero para ejecutarlo, debe dar el nombre del paquete y luego el nombre de su clase java:

C:\SimpleJavaProject\src > java com.hello.programs.ABC
Harshad Holkar
fuente
19

Complete un archivo Java para generar una clase:

javac filename.java

Ejecute la clase generada:

java filename
Paresh3489227
fuente
Tenga en cuenta que su "nombre de archivo" es en realidad el nombre de una clase. Java.exe buscará en cada archivo * .jar una clase de este nombre.
Doomjunky
@Doomjunky ¿Podría explicarlo, por favor? ¿Eso es malo o bueno? ¿Debería ser nombrado de manera diferente?
David Ferenczy Rogožan
9

Es fácil. Si ha guardado su archivo como A.text, lo primero que debe hacer es guardarlo como A.java. Ahora es un archivo Java.

Ahora necesita abrir cmd y establecer la ruta a su archivo A.java antes de compilarlo. puedes referir esto para eso.

Luego puedes compilar tu archivo usando el comando

javac A.java

Luego ejecútalo usando

java A

Así es como compila y ejecuta un programa java en cmd. También puede revisar este material que es Java en lecciones de profundidad. Hay muchas cosas que debes entender en Java para principiantes.

Eliza Helena
fuente
7

Puede compilar cualquier fuente de Java utilizando javac en la línea de comandos; por ejemplo, javac CopyFile.java. Para ejecutar: Java CopyFile. También puede compilar todos los archivos java usando javac * .java siempre que estén en el mismo directorio

Si tiene un problema resultante de "no se pudo encontrar o cargar la clase principal", es posible que no tenga jre en su camino. Eche un vistazo a esta pregunta: no se pudo encontrar o cargar la clase principal

monika
fuente
7

Suponiendo que el archivo se llama "CopyFile.java", haga lo siguiente:

javac CopyFile.java
java -cp . CopyFile

La primera línea compila el código fuente en código de byte ejecutable. La segunda línea lo ejecuta, primero agrega el directorio actual a la ruta de clase (por si acaso).

YakovK
fuente
3
mycomputer: usuario bin $ java -cp. Main.class Error: no se pudo encontrar o cargar la clase principal Main.class
chrips
4

En Windows 7 tuve que hacer lo siguiente:

de manera rápida

  1. Instale JDK http://www.oracle.com/technetwork/java/javase/downloads
  2. en Windows, busque "C: \ Archivos de programa \ Java \ jdk1.8.0_91 \ bin" (o donde esté instalada la última versión de JDK), mantenga presionada la tecla Mayús y haga clic derecho en un área en blanco dentro de la ventana y haga "abrir" ventana de comando aquí "y esto le dará una línea de comando y acceso a todas las herramientas BIN. "javac" no está por defecto en la variable de entorno PATH del sistema de Windows.
  3. Siga los comentarios anteriores sobre cómo compilar el archivo ("javac MyFile.java" y luego "java MyFile") https://stackoverflow.com/a/33149828/194872

largo camino

  1. Instale JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html
  2. Después de la instalación, edita la variable de entorno PATH de Windows y agrega lo siguiente a la ruta C: \ ProgramData \ Oracle \ Java \ javapath. Dentro de esta carpeta hay enlaces simbólicos a un puñado de ejecutables de Java, pero "javac" NO es uno de ellos, por lo que al intentar ejecutar "javac" desde la línea de comandos de Windows arroja un error.
  3. Edité la ruta: Panel de control -> Sistema -> pestaña Avanzado -> botón "Variables de entorno ..." -> desplácese hacia abajo hasta "Ruta", resalte y edite -> reemplazó "C: \ ProgramData \ Oracle \ Java \ javapath "con una ruta directa a la carpeta BIN de Java" C: \ Archivos de programa \ Java \ jdk1.8.0_91 \ bin ".
  4. Esto probablemente se rompe cuando actualiza su instalación de JDK, pero ahora tiene acceso a todas las herramientas de línea de comandos.

  5. Siga los comentarios anteriores sobre cómo compilar el archivo ("javac MyFile.java" y luego "java MyFile") https://stackoverflow.com/a/33149828/194872

Chris Smith
fuente
2

ingrese la descripción de la imagen aquí PASO 1: ABRA PRIMERO EL INICIO DE MANDO DONDE SE ENCUENTRA SU ARCHIVO. (haga clic derecho mientras presiona shift)
PASO 2: LUEGO USE LOS SIGUIENTES COMANDOS PARA EJECUTAR. (digamos que el nombre del archivo y la clase que se ejecutará se denomina Student.java) El programa de ejemplo está en el fondo de la imagen.

     javac Student.java
     java Student

ingrese la descripción de la imagen aquí

Ashwant Manikoth
fuente
1

A partir de Java 9, el JDK incluye jshell un REPL de Java.

Suponiendo que el bindirectorio JDK 9+ se haya agregado correctamente a su ruta, podrá simplemente:

  1. Correr jshell File.java-File.java siendo su archivo, por supuesto.
  2. Se abrirá un mensaje que le permitirá llamar al mainmétodo:jshell> File.main(null) .
  3. Para cerrar el mensaje y finalizar la sesión JVM, use /exit

La documentación completa para JShell se puede encontrar aquí .

Horsey
fuente
1

Ahora (con JDK 9 en adelante), puede usar java para ejecutarlo. Para ejecutar "Hello.java" que contiene el main, se puede usar: java Hello.java

Ya no necesita compilar usando javac por separado.

Shiba
fuente
Esta característica se ha agregado en JDK 11.
Holger