ฉันจะรันโปรแกรม Java จากบรรทัดคำสั่งบน Windows ได้อย่างไร


216

ฉันพยายามรันโปรแกรม Java จากบรรทัดคำสั่งใน Windows นี่คือรหัสของฉัน:

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

ฉันไม่แน่ใจวิธีการใช้งานโปรแกรม - ความช่วยเหลือใด ๆ เป็นไปได้ใน Windows? ทำไมจึงแตกต่างจากสภาพแวดล้อมอื่น (ฉันคิดว่า JVM เขียนครั้งเดียวทำงานที่ใดก็ได้)


33
javac CopyFile.javaและจากนั้นjava CopyFile
alfasin

ฉันอยู่ที่บรรทัดคำสั่งตอนนี้ฉันต้องบันทึกไฟล์ txt ของฉันในโฟลเดอร์เดียวกับโปรแกรมที่จะเรียกใช้หรือไม่
Elizabeth Turner

แพ็คเกจใดที่มีCopyFileอยู่
MadProgrammer

1
@Elizabeth Turner ก่อนอื่นคุณต้องตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง JRE (Java Runtime Env) และมันเป็นรูปแบบที่สามารถเข้าถึงได้ทุกโฟลเดอร์ (เส้นทางไปยัง Java / Javac รวมอยู่ในตัวแปรเส้นทาง env) จากนั้นเรียกใช้คำสั่งที่ฉันเขียนด้านบนจากโฟลเดอร์เดียวกันกับที่ CopyFile.java ตั้งอยู่
alfasin

ดูJava , เส้นทางและ CLASSPATHและคำถามนี้เล่นโปรแกรม Java จากบรรทัดคำสั่ง
C. Ross

คำตอบ:


240

ที่มา: javaindos

สมมติว่าไฟล์ของคุณอยู่ใน C: \ mywork \

เรียกใช้พรอมต์คำสั่ง

C:\> cd \mywork

สิ่งนี้ทำให้ C: \ mywork เป็นไดเรกทอรีปัจจุบัน

C:\mywork> dir

สิ่งนี้แสดงเนื้อหาไดเร็กทอรี คุณควรเห็น filenamehere.java ในบรรดาไฟล์ต่างๆ

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

สิ่งนี้บอกระบบว่าจะหาโปรแกรม JDK ได้ที่ไหน

C:\mywork> javac filenamehere.java

สิ่งนี้รัน javac.exe คอมไพเลอร์ คุณไม่ควรเห็นอะไรเลยนอกจากระบบถามต่อไป ...

C:\mywork> dir

javac ได้สร้างไฟล์ filenamehere.class คุณควรเห็น filenamehere.java และ filenamehere.class ท่ามกลางไฟล์ต่างๆ

C:\mywork> java filenamehere

สิ่งนี้รันล่าม Java จากนั้นคุณควรเห็นผลลัพธ์ของโปรแกรม

หากระบบไม่พบ javac ให้ตรวจสอบคำสั่ง set path หาก javac ทำงาน แต่คุณพบข้อผิดพลาดให้ตรวจสอบข้อความ Java ของคุณ หากโปรแกรมรวบรวม แต่คุณได้รับข้อยกเว้นให้ตรวจสอบการสะกดและการใช้อักษรตัวพิมพ์ใหญ่ในชื่อไฟล์และชื่อคลาสและคำสั่ง java HelloWorld Java เป็นกรณี ๆ ไป!


27
ปัญหาที่ฉันมีคือเมื่อฉันพยายามเรียกใช้คอมไพเลอร์ฉันพบข้อผิดพลาด "ไม่พบหรือโหลดคลาสหลักของ CopyFile
Elizabeth Turner

2
หากคุณมีโฟลเดอร์ที่มี CopyFile.class ตั้งเป็นไดเรกทอรีปัจจุบันให้ลอง "java -cp. CopyFile" มิฉะนั้น "java -cp FULLPATH CopyFile"
Nicholas Kadaeux

ฉันจะสร้างไฟล์แบตช์ที่คอมไพล์ & รันโค้ดได้อย่างไร แต่ถ้ามันคอมไพล์มาก่อนเพิ่งจะเปิดมัน?
นักพัฒนา android

2
มีอะไรหายไป: ถ้าคลาสถูกประกาศให้อยู่ในแพ็คเกจที่แน่นอนคุณต้องใส่.classไฟล์ในโครงสร้างไดเรกทอรีที่เหมาะสม ไดเรกทอรีปัจจุบันคือ classpath เริ่มต้นดังนั้นคุณไม่จำเป็นต้องตั้งค่า-cp .ด้วยตนเอง
Artur Czajka

2
แน่นอนคุณควรใช้แพ็คเกจ: package mypackage; จากนั้นไปที่ projectname ของคุณ / เรียกใช้ java mypackage.Main
chrips

108

เพื่อให้คำตอบสมบูรณ์:

  1. ไฟล์ Java

    TheJavaFile.java
  2. รวบรวมไฟล์ Java เป็นไฟล์ * .class

    javac TheJavaFile.java
    • จะเป็นการสร้างTheJavaFile.classไฟล์
  3. การดำเนินการของไฟล์ Java

    java TheJavaFile
  4. การสร้าง*.jarไฟล์เรียกทำงาน

    • คุณมีสองตัวเลือกที่นี่ -

      1. ด้วยไฟล์รายการภายนอก:

        • สร้างไฟล์รายการพูด - MANIFEST.mf

        • ไฟล์มานิเฟสต์ไม่ได้เป็นเพียงแค่รายการหลักของคลาสอย่างชัดเจน

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

      2. ดำเนินการโดยจุดเข้าใช้งาน:

        • jar -cvfe TheJavaFile.jar <MainClass> TheJavaFile.class
  5. เพื่อเรียกใช้ไฟล์ Jar

    java -jar TheJavaFile.jar

5
คุณช่วยแสดงเนื้อหาของ MANIFEST.mf ได้ไหมเพราะเมื่อฉันพยายามที่จะ "ปฏิบัติตามจุดเข้าใช้งาน" มันบอกว่าไม่พบคลาสหลัก
Pini Cheyni

@Pini Cheyni หากคลาสของคุณชื่อ MainClass ไฟล์ Manifest ของคุณจะมีรายการสำหรับ Main-Class: MainClass
jkhosla

@PiniCheyni ทั้งสองวิธีในการสร้างขวดที่ปฏิบัติได้มีการอธิบายไว้ที่นี่ docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Dinesh Kumar P

ที่จุด 3 เมื่อคุณเรียกมันว่าjava TheJavaFileเทียบเท่าjava TheJavaFile.class.. ดังนั้นคุณไม่ได้เรียกใช้ไฟล์จาวาตามที่คุณระบุ คุณกำลังเรียกใช้ไฟล์คลาส ไฟล์ java เป็นแหล่งที่ไม่สามารถเรียกใช้งานได้
user2914191

21

ในกรณีที่คลาส Java ของคุณอยู่ในแพ็คเกจ สมมติว่าคลาส Java ของคุณชื่อABC.javaนั้นมีอยู่com.hello.programsคุณจะต้องรันด้วยชื่อแพ็กเกจ

รวบรวมตามปกติ:

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

แต่เมื่อต้องการเรียกใช้คุณต้องให้ชื่อแพคเกจแล้วชื่อคลาส Java ของคุณ:

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

19

คอมไพล์ไฟล์ Java เพื่อสร้างคลาส:

javac filename.java

ดำเนินการคลาสที่สร้างขึ้น:

java filename

โปรดสังเกตว่า "ชื่อไฟล์" ของคุณเป็นชื่อของคลาสจริงๆ java.exe จะค้นหาทุกไฟล์ * .jar เพื่อหาคลาสของชื่อนี้
Doomjunky

@Doomjunky คุณช่วยอธิบายได้มั้ย มันแย่หรือดี มันควรจะตั้งชื่อแตกต่างกันอย่างไร
David Ferenczy Rogožan

9

มันง่ายมาก หากคุณบันทึกไฟล์เป็น A.text สิ่งแรกที่คุณควรทำคือบันทึกเป็น A.java ตอนนี้มันเป็นไฟล์ Java

ตอนนี้คุณต้องเปิด cmd และตั้งค่าพา ธ ไปยังไฟล์ A.java ของคุณก่อนที่จะรวบรวม คุณสามารถดูนี้ได้

จากนั้นคุณสามารถรวบรวมไฟล์ของคุณโดยใช้คำสั่ง

javac A.java

จากนั้นเรียกใช้โดยใช้

java A

นั่นคือวิธีที่คุณคอมไพล์และรันโปรแกรมจาวาใน cmd คุณยังสามารถดูเนื้อหาเหล่านี้ที่เป็น Java ในบทเรียนเชิงลึก มีหลายสิ่งที่คุณต้องเข้าใจใน Java สำหรับผู้เริ่มต้น


7

คุณสามารถรวบรวมซอร์ส java ใด ๆ โดยใช้ javac ในบรรทัดคำสั่ง; เช่น javac CopyFile.java วิธีเรียกใช้: java CopyFile คุณสามารถรวบรวมไฟล์ java ทั้งหมดโดยใช้ javac * .java ตราบใดที่ไฟล์นั้นอยู่ในไดเรกทอรีเดียวกัน

หากคุณกำลังมีปัญหาที่ทำให้ "ไม่สามารถค้นหาหรือโหลดคลาสหลัก" คุณอาจไม่มีเส้นทางในตัวคุณ ดูคำถามนี้: ไม่พบหรือโหลดคลาสหลัก


7

สมมติว่าไฟล์นั้นมีชื่อว่า "CopyFile.java" ให้ทำดังต่อไปนี้:

javac CopyFile.java
java -cp . CopyFile

บรรทัดแรกจะคอมไพล์ซอร์สโค้ดลงในโค้ดไบต์ที่รันได้ บรรทัดที่สองดำเนินการก่อนเพิ่มไดเรกทอรีปัจจุบันไปยังคลาสพา ธ (ในกรณี)


3
mycomputer: bin ผู้ใช้ $ java -cp ข้อผิดพลาด Main.class: ไม่สามารถค้นหาหรือโหลดคลาสหลัก Main.class
chrips

5

ตั้งแต่ Java 11 javaเครื่องมือบรรทัดคำสั่งสามารถเรียกใช้ซอร์สโค้ดไฟล์เดียวได้โดยตรง เช่น

java HelloWorld.java

นี่เป็นการปรับปรุงด้วย JEP 330: https://openjdk.java.net/jeps/330

สำหรับรายละเอียดการใช้งานและข้อ จำกัด โปรดดูคู่มือการใช้งานจาวาของคุณเช่นการให้บริการโดย Oracle: https://docs.oracle.com/en/java/javase/11/tools/java.html


4

ใน Windows 7 ฉันต้องทำสิ่งต่อไปนี้:

วิธีที่รวดเร็ว

  1. ติดตั้ง JDK http://www.oracle.com/technetwork/java/javase/downloads
  2. ในหน้าต่างเรียกดูใน "C: \ Program Files \ Java \ jdk1.8.0_91 \ bin" (หรือที่ใดก็ตามที่ติดตั้ง JDK รุ่นล่าสุด) กด Shift ค้างไว้และคลิกขวาบนพื้นที่ว่างภายในหน้าต่างและเปิด "เปิด หน้าต่างคำสั่งที่นี่ "และสิ่งนี้จะให้บรรทัดคำสั่งและการเข้าถึงเครื่องมือ BIN ทั้งหมด "javac" ไม่ได้เป็นค่าเริ่มต้นในตัวแปรสภาพแวดล้อม PATH ของระบบ windows
  3. ติดตามความคิดเห็นด้านบนเกี่ยวกับวิธีรวบรวมไฟล์ ("javac MyFile.java" จากนั้น "java MyFile") https://stackoverflow.com/a/33149828/194872

ทางยาว

  1. ติดตั้ง JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html
  2. หลังจากติดตั้งแล้วให้แก้ไขตัวแปรสภาพแวดล้อม Windows PATH และเพิ่มค่าต่อไปนี้ในพา ธ C: \ ProgramData \ Oracle \ Java \ javapath ภายในโฟลเดอร์นี้เป็นลิงก์สัญลักษณ์ไปยังไฟล์เรียกทำงานจาวาจำนวนหนึ่งแต่ "javac" ไม่ใช่หนึ่งในนั้นดังนั้นเมื่อพยายามเรียกใช้ "javac" จากบรรทัดคำสั่งของ Windows จะมีข้อผิดพลาดเกิดขึ้น
  3. ฉันแก้ไขเส้นทาง: แผงควบคุม -> ระบบ -> แท็บขั้นสูง -> ปุ่ม "ตัวแปรสภาพแวดล้อม ... " -> เลื่อนลงไปที่ "เส้นทาง" ไฮไลต์และแก้ไข -> แทนที่ "C: \ ProgramData \ Oracle \ Java \ javapath "ด้วยพา ธ โดยตรงไปยังโฟลเดอร์ java BIN" C: \ Program Files \ Java \ jdk1.8.0_91 \ bin "
  4. สิ่งนี้อาจแตกหักเมื่อคุณอัพเกรดการติดตั้ง JDK ของคุณ แต่คุณสามารถเข้าถึงเครื่องมือบรรทัดคำสั่งทั้งหมดได้ทันที

  5. ติดตามความคิดเห็นด้านบนเกี่ยวกับวิธีรวบรวมไฟล์ ("javac MyFile.java" จากนั้น "java MyFile") https://stackoverflow.com/a/33149828/194872


2

ป้อนคำอธิบายรูปภาพที่นี่ ขั้นตอนที่ 1: เปิดตัวคำสั่งแรกที่ไฟล์ของคุณตั้งอยู่ (คลิกขวาขณะกด shift)
ขั้นตอนที่ 2: จากนั้นใช้คำสั่งต่อไปนี้เพื่อดำเนินการ (สมมติว่าชื่อไฟล์และคลาสที่จะดำเนินการนั้นมีชื่อว่า Student.java) โปรแกรมตัวอย่างอยู่ในพื้นหลังรูปภาพ

     javac Student.java
     java Student

ป้อนคำอธิบายรูปภาพที่นี่


1

ในฐานะของ Java 9, JDK ประกอบด้วยjshell, Java REPL

สมมติว่าbinไดเรกทอรีJDK 9+ นั้นถูกเพิ่มลงในพา ธ ของคุณอย่างถูกต้องคุณจะสามารถ:

  1. เรียกใช้jshell File.java- File.javaเป็นไฟล์ของคุณแน่นอน
  2. พรอมต์จะเปิดช่วยให้คุณสามารถเรียกวิธีการ:mainjshell> File.main(null)
  3. ในการปิดพรอมต์และสิ้นสุดเซสชัน JVM ให้ใช้ /exit

เอกสารฉบับเต็มสำหรับ JShell สามารถพบได้ที่นี่


1

ตอนนี้ (ด้วย JDK 9 เป็นต้นไป) คุณสามารถใช้ java เพื่อดำเนินการนั้น เพื่อที่จะดำเนินการ "Hello.java" ที่มีหลักหนึ่งสามารถใช้: java Hello.java

คุณไม่จำเป็นต้องรวบรวมโดยใช้ javac แยกต่างหากอีกต่อไป


สถานที่นี้ได้รับการเพิ่มใน JDK 11
Holger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.