Wie führe ich ein Java-Programm über die Befehlszeile unter Windows aus?

216

Ich versuche, ein Java-Programm über die Befehlszeile in Windows auszuführen. Hier ist mein 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();
        }
    }
}

Ich bin nicht sicher, wie ich das Programm ausführen soll - Hilfe? Ist das unter Windows möglich? Warum unterscheidet es sich von einer anderen Umgebung (ich dachte, JVM wurde einmal geschrieben und überall ausgeführt)?

Elizabeth Turner
quelle
33
javac CopyFile.javaund dannjava CopyFile
Alfasin
Ich bin jetzt in der Befehlszeile. Muss ich meine txt-Dateien im selben Ordner wie das Programm speichern, damit sie aufgerufen werden können?
Elizabeth Turner
Welches Paket befindet CopyFilesich
MadProgrammer
1
@ Elizabeth Turner Zuerst müssen Sie sicherstellen, dass Sie JRE (Java Runtime Env) installiert haben und dass es von jedem Ordner aus zugänglich ist (der Pfad zu Java / Javac ist in der Variablen PATH env enthalten). Führen Sie dann die oben beschriebenen Befehle in demselben Ordner aus, in dem sich CopyFile.java befindet.
Alfasin

Antworten:

240

Quelle: Javaindos.

Angenommen, Ihre Datei befindet sich in C: \ mywork \

Führen Sie die Eingabeaufforderung aus

C:\> cd \mywork

Dies macht C: \ mywork zum aktuellen Verzeichnis.

C:\mywork> dir

Dies zeigt den Verzeichnisinhalt an. Sie sollten filenamehere.java unter den Dateien sehen.

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

Dies teilt dem System mit, wo JDK-Programme zu finden sind.

C:\mywork> javac filenamehere.java

Dadurch wird der Compiler javac.exe ausgeführt. Sie sollten nur die nächste Systemaufforderung sehen ...

C:\mywork> dir

javac hat die Datei filenamehere.class erstellt. Sie sollten filenamehere.java und filenamehere.class unter den Dateien sehen.

C:\mywork> java filenamehere

Dadurch wird der Java-Interpreter ausgeführt. Sie sollten dann Ihre Programmausgabe sehen.

Wenn das System javac nicht finden kann, überprüfen Sie den Befehl set path. Wenn javac ausgeführt wird, aber Fehler auftreten, überprüfen Sie Ihren Java-Text. Wenn das Programm kompiliert wird, Sie jedoch eine Ausnahme erhalten, überprüfen Sie die Rechtschreibung und Großschreibung im Dateinamen und im Klassennamen sowie im Java-Befehl HelloWorld. Java unterscheidet zwischen Groß- und Kleinschreibung!

Nicholas Kadaeux
quelle
27
Das Problem, das ich habe, ist, wenn ich versuche, den Compiler auszuführen, erhalte ich eine Fehlermeldung "konnte Hauptklasse CopyFile
Elizabeth Turner
2
Wenn Sie den Ordner mit CopyFile.class als aktuelles Verzeichnis festgelegt haben, versuchen Sie einfach "java -cp. CopyFile". Andernfalls "java -cp FULLPATH CopyFile"
Nicholas Kadaeux
Wie würde ich eine Batch-Datei erstellen, die den Code kompiliert und ausführt? Wenn er zuvor kompiliert wurde, starten Sie ihn einfach.
Android-Entwickler
2
Was fehlt: Wenn die Klasse als in einem bestimmten Paket deklariert wurde, müssen Sie die .classDatei in die entsprechende Verzeichnisstruktur einfügen. Das aktuelle Verzeichnis ist der Standardklassenpfad, sodass Sie es nicht -cp .manuell festlegen müssen.
Artur Czajka
2
Auf jeden Fall sollten Sie ein Paket verwenden: package mypackage; Gehen Sie dann zu Ihrem Projektnamen /. Führen Sie Java Mypackage.Main
Chrips
108

Um die Antwort zu vervollständigen:

  1. Die Java-Datei

    TheJavaFile.java
  2. Kompilieren Sie die Java-Datei in eine * .class-Datei

    javac TheJavaFile.java
    • Dadurch wird eine TheJavaFile.classDatei erstellt
  3. Ausführung der Java-Datei

    java TheJavaFile
  4. Erstellung einer ausführbaren *.jarDatei

    • Sie haben hier zwei Möglichkeiten -

      1. Mit einer externen Manifestdatei:

        • Erstellen Sie die Manifestdatei say - MANIFEST.mf

        • Die MANIFEST-Datei ist nichts anderes als ein expliziter Eintrag der Hauptklasse

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

      2. Ausführbar nach Einstiegspunkt:

        • jar -cvfe TheJavaFile.jar <MainClass> TheJavaFile.class
  5. So führen Sie die Jar-Datei aus

    java -jar TheJavaFile.jar
jkhosla
quelle
5
Können Sie bitte den Inhalt von MANIFEST.mf anzeigen, denn wenn ich versuche, "Ausführbar nach Einstiegspunkt", heißt es, dass die Hauptklasse nicht gefunden werden kann
Pini Cheyni
@Pini Cheyni Wenn Ihre Klasse die Hauptklasse heißt, hat Ihre Manifestdatei einen Eintrag für die Hauptklasse: Hauptklasse
jkhosla
@PiniCheyni, Die zwei Möglichkeiten zum Erstellen ausführbarer Jars werden hier ausführlich erläutert. docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Dinesh Kumar P
In Punkt 3, wenn Sie das als java TheJavaFileäquivalent zu java TheJavaFile.class... bezeichnen, führen Sie die Java-Datei nicht wie angegeben aus. Sie führen die Klassendatei aus. Java-Dateien sind Quellen, die nicht ausführbar sind
user2914191
21

Falls sich Ihre Java-Klasse in einem Paket befindet. Angenommen, Ihre Java-Klasse mit dem Namen ABC.javaist in vorhandencom.hello.programs , dann müssen Sie sie mit dem Paketnamen ausführen.

Kompilieren Sie es wie gewohnt:

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

Aber um es auszuführen, müssen Sie den Paketnamen und dann Ihren Java-Klassennamen angeben:

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

Füllen Sie eine Java-Datei aus, um eine Klasse zu generieren:

javac filename.java

Führen Sie die generierte Klasse aus:

java filename
Paresh3489227
quelle
Beachten Sie, dass Ihr "Dateiname" tatsächlich ein Name einer Klasse ist. Die java.exe durchsucht jede * .jar-Datei nach einer Klasse mit diesem Namen.
Doomjunky
@Doomjunky Könnten Sie es bitte erklären? Ist das schlecht oder gut? Sollte es anders benannt werden?
David Ferenczy Rogožan
9

Es ist leicht. Wenn Sie Ihre Datei als A.text gespeichert haben, sollten Sie sie zunächst als A.java speichern. Jetzt ist es eine Java-Datei.

Jetzt müssen Sie cmd öffnen und den Pfad zu Ihrer A.java-Datei festlegen, bevor Sie sie kompilieren. Sie können dies dafür verweisen .

Anschließend können Sie Ihre Datei mit dem Befehl kompilieren

javac A.java

Führen Sie es dann mit aus

Java A.

So kompilieren und führen Sie ein Java-Programm in cmd aus. Sie können diese auch durchgehen Material , das Java ist, auch ausführlich . Viele Dinge, die Sie in Java verstehen müssen, werden dort für Anfänger behandelt.

Eliza Helena
quelle
7

Sie können jede Java-Quelle mit Javac in der Befehlszeile kompilieren. zB javac CopyFile.java. So führen Sie aus: Java CopyFile. Sie können auch alle Java-Dateien mit javac * .java kompilieren, solange sie sich im selben Verzeichnis befinden

Wenn Sie ein Problem haben, das dazu führt, dass die Hauptklasse nicht gefunden oder geladen werden konnte, befindet sich möglicherweise kein JRE in Ihrem Pfad. Schauen Sie sich diese Frage an: Die Hauptklasse konnte nicht gefunden oder geladen werden

Monika
quelle
7

Angenommen, die Datei heißt "CopyFile.java", gehen Sie wie folgt vor:

javac CopyFile.java
java -cp . CopyFile

In der ersten Zeile wird der Quellcode in ausführbaren Bytecode kompiliert. Die zweite Zeile führt es aus und fügt zuerst das aktuelle Verzeichnis zum Klassenpfad hinzu (nur für den Fall).

YakovK
quelle
3
mycomputer: bin user $ java -cp. Main.class Fehler: Hauptklasse Main.class konnte nicht gefunden oder geladen werden
chrips
5

Seit Java 11 kann das javaBefehlszeilentool einen Quellcode für eine einzelne Datei direkt ausführen. z.B

java HelloWorld.java

Dies war eine Verbesserung mit JEP 330: https://openjdk.java.net/jeps/330

Einzelheiten zur Verwendung und zu den Einschränkungen finden Sie im Handbuch Ihrer Java-Implementierung, wie es beispielsweise von Oracle bereitgestellt wird: https://docs.oracle.com/en/java/javase/11/tools/java.html

akawaguc
quelle
4

Unter Windows 7 musste ich Folgendes tun:

schneller Weg

  1. Installieren Sie JDK http://www.oracle.com/technetwork/java/javase/downloads
  2. Navigieren Sie in Windows zu "C: \ Programme \ Java \ jdk1.8.0_91 \ bin" (oder wo immer die neueste Version von JDK installiert ist), halten Sie die Umschalttaste gedrückt und klicken Sie mit der rechten Maustaste auf einen leeren Bereich im Fenster und führen Sie "Öffnen" aus Befehlsfenster hier "und dies gibt Ihnen eine Befehlszeile und Zugriff auf alle BIN-Tools. "javac" ist nicht standardmäßig in der Umgebungsvariablen PATH des Windows-Systems enthalten.
  3. Befolgen Sie die obigen Kommentare zum Kompilieren der Datei ("javac MyFile.java", dann "java MyFile") https://stackoverflow.com/a/33149828/194872

langer Weg

  1. Installieren Sie JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html
  2. Bearbeiten Sie nach der Installation die Windows-Umgebungsvariable PATH und fügen Sie dem Pfad C Folgendes hinzu: \ ProgramData \ Oracle \ Java \ javapath. In diesem Ordner befinden sich symbolische Links zu einer Handvoll ausführbarer Java-Dateien, aber "javac" ist KEINE davon Wenn Sie also versuchen, "javac" über die Windows-Befehlszeile auszuführen, wird ein Fehler ausgegeben.
  3. Ich habe den Pfad bearbeitet: Systemsteuerung -> System -> Registerkarte Erweitert -> Schaltfläche "Umgebungsvariablen ..." -> nach unten zu "Pfad" scrollen, markieren und bearbeiten -> "C: \ ProgramData \ Oracle \ Java \" ersetzen javapath "mit einem direkten Pfad zum Java-BIN-Ordner" C: \ Programme \ Java \ jdk1.8.0_91 \ bin ".
  4. Dies wird wahrscheinlich unterbrochen, wenn Sie Ihre JDK-Installation aktualisieren, aber Sie haben jetzt Zugriff auf alle Befehlszeilentools.

  5. Befolgen Sie die obigen Kommentare zum Kompilieren der Datei ("javac MyFile.java", dann "java MyFile") https://stackoverflow.com/a/33149828/194872

Chris Smith
quelle
2

Geben Sie hier die Bildbeschreibung ein SCHRITT 1: ÖFFNEN SIE ZUERST DEN BEFEHLS-PROMPT, WO IHRE DATEI BEFINDET. (Klicken Sie mit der rechten Maustaste, während Sie die Umschalttaste drücken.)
SCHRITT 2: VERWENDEN SIE DANN DIE FOLGENDEN BEFEHLE, UM AUSZUFÜHREN. (Angenommen, der auszuführende Datei- und Klassenname heißt Student.java.) Das Beispielprogramm befindet sich im Bildhintergrund.

     javac Student.java
     java Student

Geben Sie hier die Bildbeschreibung ein

Ashwant Manikoth
quelle
1

Ab Java 9 enthält das JDK jshell eine Java-REPL.

Angenommen, das JDK 9+ -Verzeichnis binwird Ihrem Pfad korrekt hinzugefügt, können Sie einfach:

  1. Ausführen jshell File.java-File.java natürlich deine Datei.
  2. Eine Eingabeaufforderung wird geöffnet, in der Sie die mainMethode aufrufen können :jshell> File.main(null) .
  3. Verwenden Sie, um die Eingabeaufforderung zu schließen und die JVM-Sitzung zu beenden /exit

Die vollständige Dokumentation zu JShell finden Sie hier .

Pferd
quelle
1

Jetzt (ab JDK 9) können Sie einfach Java verwenden, um dies auszuführen. Um "Hello.java" mit dem Hauptmenü auszuführen, kann man verwenden: java Hello.java

Sie müssen nicht mehr separat mit javac kompilieren.

Shiba
quelle
Diese Funktion wurde in JDK 11 hinzugefügt.
Holger