Comment exécuter un programme Java à partir de la ligne de commande sous Windows?

216

J'essaie d'exécuter un programme Java à partir de la ligne de commande sous Windows. Voici mon code:

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

Je ne sais pas comment exécuter le programme - une aide? Est-ce possible sous Windows? Pourquoi est-il différent d'un autre environnement (je pensais que la machine virtuelle Java était une fois écrite, exécutée n'importe où)?

Elizabeth Turner
la source
33
javac CopyFile.javapuisjava CopyFile
alfasin
Je suis maintenant en ligne de commande, dois-je enregistrer mes fichiers txt dans le même dossier que le programme pour qu'ils soient appelés?
Elizabeth Turner
Quel paquet CopyFileréside
MadProgrammer
1
@Elizabeth Turner vous devez d'abord vous assurer que vous avez installé JRE (Java Runtime Env) et qu'il est accessible depuis chaque dossier (le chemin d'accès à Java / Javac est inclus dans la variable env PATH). Exécutez ensuite les commandes que j'ai écrites ci-dessus à partir du même dossier dans lequel se trouve CopyFile.java.
Alfasin

Réponses:

240

Source: javaindos.

Supposons que votre fichier se trouve dans C: \ mywork \

Exécuter l'invite de commande

C:\> cd \mywork

Cela fait de C: \ mywork le répertoire courant.

C:\mywork> dir

Cela affiche le contenu du répertoire. Vous devriez voir filenamehere.java parmi les fichiers.

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

Cela indique au système où trouver les programmes JDK.

C:\mywork> javac filenamehere.java

Cela exécute javac.exe, le compilateur. Vous ne devriez voir que la prochaine invite système ...

C:\mywork> dir

javac a créé le fichier filenamehere.class. Vous devriez voir filenamehere.java et filenamehere.class parmi les fichiers.

C:\mywork> java filenamehere

Cela exécute l'interpréteur Java. Vous devriez alors voir la sortie de votre programme.

Si le système ne trouve pas javac, vérifiez la commande set path. Si javac s'exécute mais que vous obtenez des erreurs, vérifiez votre texte Java. Si le programme compile mais que vous obtenez une exception, vérifiez l'orthographe et la capitalisation dans le nom de fichier et le nom de classe et la commande java HelloWorld. Java est sensible à la casse!

Nicholas Kadaeux
la source
27
Le problème que je rencontre est lorsque j'essaie d'exécuter le compilateur, j'obtiens une erreur "impossible de trouver ou de charger la classe principale CopyFile
Elizabeth Turner
2
Si le dossier contenant CopyFile.class est défini comme répertoire courant, essayez simplement "java -cp. CopyFile" Sinon "java -cp FULLPATH CopyFile"
Nicholas Kadaeux
Comment pourrais-je créer un fichier batch qui compile et exécute le code, mais s'il a été compilé auparavant, il suffit de le lancer?
développeur Android
2
Ce qui manque: si la classe a été déclarée dans un certain paquet, alors vous devez mettre le .classfichier dans la structure de répertoire appropriée. Le répertoire courant est le chemin d'accès aux classes par défaut, vous n'avez donc pas à le définir -cp .manuellement.
Artur Czajka
2
Pour sûr, vous devez utiliser un package: package mypackage; puis allez dans votre nom de projet /. Exécutez java mypackage.Main
chrips
108

Pour compléter la réponse:

  1. Le fichier Java

    TheJavaFile.java
  2. Compilez le fichier Java dans un fichier * .class

    javac TheJavaFile.java
    • Cela va créer un TheJavaFile.classfichier
  3. Exécution du fichier Java

    java TheJavaFile
  4. Création d'un *.jarfichier exécutable

    • Vous avez deux options ici -

      1. Avec un fichier manifeste externe:

        • Créez le fichier manifeste say - MANIFEST.mf

        • Le fichier MANIFEST n'est rien d'autre qu'une entrée explicite de la classe principale

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

      2. Exécutable par Entry Point:

        • jar -cvfe TheJavaFile.jar <MainClass> TheJavaFile.class
  5. Pour exécuter le fichier Jar

    java -jar TheJavaFile.jar
jkhosla
la source
5
pouvez-vous s'il vous plaît montrer le contenu de MANIFEST.mf, parce que quand j'essaie de "Exécutable par Entry Point", il dit que la classe principale est introuvable
Pini Cheyni
@Pini Cheyni Si votre classe est appelée MainClass alors votre fichier manifeste aura une entrée pour la Main-Class: MainClass
jkhosla
@PiniCheyni, Les 2 façons de créer des jars exécutables sont bien expliquées ici. docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Dinesh Kumar P
au point 3, lorsque vous appelez java TheJavaFilec'est équivalent à java TheJavaFile.class.. donc vous n'exécutez pas le fichier java comme vous l'avez dit. vous exécutez le fichier de classe. les fichiers java sont des sources qui ne sont pas exécutables
user2914191
21

Dans le cas où votre classe Java est dans un package. Supposons que votre classe Java nommée ABC.javasoit présente dans com.hello.programs, alors vous devez l'exécuter avec le nom du package.

Compilez-le de la manière habituelle:

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

Mais pour l'exécuter, vous devez donner le nom du package puis votre nom de classe java:

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

Complétez un fichier Java pour générer une classe:

javac filename.java

Exécutez la classe générée:

java filename
Paresh3489227
la source
Notez que votre "nom de fichier" est en fait le nom d'une classe. Java.exe recherchera dans chaque fichier * .jar une classe de ce nom.
Doomjunky
@Doomjunky Pourriez-vous l'expliquer, s'il vous plaît? Est-ce mauvais ou bon? Doit-il être nommé différemment?
David Ferenczy Rogožan
9

C'est facile. Si vous avez enregistré votre fichier sous A.text, la première chose à faire est de l'enregistrer sous A.java. Maintenant, c'est un fichier Java.

Vous devez maintenant ouvrir cmd et définir le chemin d'accès à votre fichier A.java avant de le compiler. vous pouvez consulter ce pour cela.

Ensuite, vous pouvez compiler votre fichier en utilisant la commande

javac A.java

Ensuite, exécutez-le en utilisant

java A

C'est ainsi que vous compilez et exécutez un programme java en cmd. Vous pouvez également parcourir ce matériel qui est Java dans des leçons approfondies. Beaucoup de choses que vous devez comprendre en Java y sont couvertes pour les débutants.

Eliza Helena
la source
7

Vous pouvez compiler n'importe quelle source java en utilisant javac en ligne de commande; par exemple, javac CopyFile.java. Pour exécuter: java CopyFile. Vous pouvez également compiler tous les fichiers java à l'aide de javac * .java tant qu'ils se trouvent dans le même répertoire

Si vous rencontrez un problème résultant de "Impossible de trouver ou de charger la classe principale", il se peut que jre ne soit pas sur votre chemin. Jetez un oeil à cette question: Impossible de trouver ou de charger la classe principale

monika
la source
7

En supposant que le fichier s'appelle "CopyFile.java", procédez comme suit:

javac CopyFile.java
java -cp . CopyFile

La première ligne compile le code source en code octet exécutable. La deuxième ligne l'exécute, ajoutant d'abord le répertoire courant au chemin de classe (juste au cas où).

YakovK
la source
3
monordinateur: utilisateur bin $ java -cp. Erreur Main.class: Impossible de trouver ou de charger la classe principale Main.class
chrips
5

Depuis Java 11, l' javaoutil de ligne de commande est capable d'exécuter directement un code source à fichier unique. par exemple

java HelloWorld.java

Il s'agissait d'une amélioration avec JEP 330: https://openjdk.java.net/jeps/330

Pour plus de détails sur l'utilisation et les limitations, consultez le manuel de votre implémentation Java tel que celui fourni par Oracle: https://docs.oracle.com/en/java/javase/11/tools/java.html

akawaguc
la source
4

Sur Windows 7, je devais faire ce qui suit:

manière rapide

  1. Installez JDK http://www.oracle.com/technetwork/java/javase/downloads
  2. dans Windows, accédez à "C: \ Program Files \ Java \ jdk1.8.0_91 \ bin" (ou partout où la dernière version de JDK est installée), maintenez la touche Maj enfoncée et cliquez avec le bouton droit sur une zone vide de la fenêtre et faites "ouvrir fenêtre de commande ici "et cela vous donnera une ligne de commande et un accès à tous les outils BIN. "javac" n'est pas par défaut dans la variable d'environnement PATH du système Windows.
  3. Suivez les commentaires ci-dessus sur la façon de compiler le fichier ("javac MyFile.java" puis "java MyFile") https://stackoverflow.com/a/33149828/194872

long chemin

  1. Installez JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html
  2. Après l'installation, dans édite la variable d'environnement Windows PATH et ajoute ce qui suit au chemin C: \ ProgramData \ Oracle \ Java \ javapath. Dans ce dossier se trouvent des liens symboliques vers une poignée d'exécutables Java, mais "javac" N'EST PAS l'un d'eux, donc lorsque vous essayez d'exécuter "javac" à partir de la ligne de commande Windows, il génère une erreur.
  3. J'ai édité le chemin: Panneau de configuration -> Système -> onglet Avancé -> bouton "Variables d'environnement ..." -> faites défiler jusqu'à "Chemin", mettez en surbrillance et modifiez -> remplacé le "C: \ ProgramData \ Oracle \ Java \ javapath "avec un chemin direct vers le dossier jin BIN" C: \ Program Files \ Java \ jdk1.8.0_91 \ bin ".
  4. Cela se brise probablement lorsque vous mettez à niveau votre installation JDK, mais vous avez maintenant accès à tous les outils de ligne de commande.

  5. Suivez les commentaires ci-dessus sur la façon de compiler le fichier ("javac MyFile.java" puis "java MyFile") https://stackoverflow.com/a/33149828/194872

Chris Smith
la source
2

entrez la description de l'image ici ÉTAPE 1: OUVREZ D'ABORD LA DEMANDE DE COMMANDE OERE SE TROUVE VOTRE FICHIER. (clic droit tout en appuyant sur Maj)
ÉTAPE 2: PUIS UTILISEZ LES COMMANDES SUIVANTES POUR EXÉCUTER. (disons que le nom du fichier et de la classe à exécuter est nommé Student.java) L'exemple de programme est en arrière-plan de l'image.

     javac Student.java
     java Student

entrez la description de l'image ici

Ashwant Manikoth
la source
1

Depuis Java 9, le JDK comprend jshell, un Java REPL.

En supposant que le binrépertoire JDK 9+ est correctement ajouté à votre chemin, vous pourrez simplement:

  1. Run jshell File.java- File.javaétant votre fichier bien sûr.
  2. Une invite ouvrira, vous permettant d'appeler la mainméthode: jshell> File.main(null).
  3. Pour fermer l'invite et terminer la session JVM, utilisez /exit

La documentation complète de JShell est disponible ici .

Chevalin
la source
1

Maintenant (avec JDK 9 et suivants), vous pouvez simplement utiliser java pour l'exécuter. Pour exécuter "Hello.java" contenant le main, on peut utiliser: java Hello.java

Vous n'avez plus besoin de compiler en utilisant séparément en utilisant javac.

Shiba
la source
Cette fonctionnalité a été ajoutée dans JDK 11.
Holger