Làm cách nào để chạy chương trình Java từ dòng lệnh trên Windows?


216

Tôi đang cố gắng thực thi một chương trình Java từ dòng lệnh trong Windows. Đây là mã của tôi:

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

Tôi không chắc chắn làm thế nào để thực hiện chương trình - bất kỳ trợ giúp? Điều này có thể có trên Windows? Tại sao nó khác với môi trường khác (tôi nghĩ JVM đã được viết một lần, chạy ở bất cứ đâu)?


33
javac CopyFile.javavà sau đójava CopyFile
alfasin

Bây giờ tôi đang ở dòng lệnh, tôi có cần lưu các tệp txt của mình trong cùng thư mục với chương trình để chúng được gọi không?
Elizabeth Turner

Gói nào CopyFilecư trú
MadProgrammer

1
@Elizabeth Turner trước tiên bạn phải đảm bảo rằng bạn đã cài đặt JRE (Java Runtime Env) và nó có thể truy cập được ở mọi thư mục (đường dẫn đến Java / Javac được bao gồm trong biến env PATH). Sau đó chạy các lệnh tôi đã viết ở trên từ cùng một thư mục chứa CopyFile.java.
alfasin

Câu trả lời:


240

Nguồn: javaindos.

Giả sử tệp của bạn nằm trong C: \ mywork \

Chạy lệnh Prompt

C:\> cd \mywork

Điều này làm cho C: \ mywork thư mục hiện tại.

C:\mywork> dir

Điều này sẽ hiển thị nội dung thư mục. Bạn sẽ thấy filenamehere.java trong số các tệp.

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

Điều này cho hệ thống biết nơi tìm các chương trình JDK.

C:\mywork> javac filenamehere.java

Điều này chạy javac.exe, trình biên dịch. Bạn sẽ không thấy gì ngoài lời nhắc hệ thống tiếp theo ...

C:\mywork> dir

javac đã tạo tập tin filenamehere. class. Bạn sẽ thấy filenamehere.java và filenamehere. Class trong số các tệp.

C:\mywork> java filenamehere

Điều này chạy trình thông dịch Java. Sau đó bạn sẽ thấy đầu ra chương trình của bạn.

Nếu hệ thống không thể tìm thấy javac, hãy kiểm tra lệnh set path. Nếu javac chạy nhưng bạn gặp lỗi, hãy kiểm tra văn bản Java của bạn. Nếu chương trình biên dịch nhưng bạn nhận được một ngoại lệ, hãy kiểm tra chính tả và viết hoa trong tên tệp và tên lớp và lệnh java HelloWorld. Java là trường hợp nhạy cảm!


27
Vấn đề tôi gặp phải là khi tôi cố chạy trình biên dịch, tôi gặp lỗi "không thể tìm thấy hoặc tải lớp chính CopyFile
Elizabeth Turner

2
Nếu bạn có thư mục chứa CopyFile. Class được đặt làm thư mục hiện tại, chỉ cần thử "java -cp. CopyFile" Nếu không "java -cp FULLPATH CopyFile"
Nicholas Kadaeux

Làm cách nào để tôi tạo một tệp bó biên dịch và chạy mã, nhưng nếu nó được biên dịch trước đó, chỉ cần khởi chạy nó?
nhà phát triển Android

2
Điều còn thiếu: nếu lớp được khai báo nằm trong một gói nhất định, thì bạn phải đặt .classtệp vào cấu trúc thư mục thích hợp. Thư mục hiện tại là đường dẫn lớp mặc định, vì vậy bạn không phải đặt -cp .thủ công.
Artur Czajka

2
Để chắc chắn, bạn nên sử dụng một gói: gói mypackage; sau đó đi đến tên dự án của bạn /. Chạy java mypackage.Main
chrips

108

Để hoàn thành câu trả lời:

  1. Tệp Java

    TheJavaFile.java
  2. Biên dịch tệp Java thành tệp *. Class

    javac TheJavaFile.java
    • Điều này sẽ tạo ra một TheJavaFile.classtập tin
  3. Thực thi tệp Java

    java TheJavaFile
  4. Tạo một *.jartập tin thực thi

    • Bạn có hai lựa chọn ở đây -

      1. Với một tệp kê khai bên ngoài:

        • Tạo tệp kê khai nói - MANIFEST.mf

        • Tệp MANIFEST không có gì ngoài mục nhập rõ ràng của Lớp chính

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

      2. Có thể thực hiện bởi Entry Entry:

        • jar -cvfe TheJavaFile.jar <MainClass> TheJavaFile.class
  5. Để chạy tệp Jar

    java -jar TheJavaFile.jar

5
bạn có thể vui lòng hiển thị nội dung của MANIFEST.mf không, bởi vì khi tôi cố gắng "Thực thi bằng Điểm nhập cảnh", nó nói rằng lớp chính không thể tìm thấy
Pini Cheyni

@Pini Cheyni Nếu lớp của bạn được gọi là MainClass thì tệp kê khai của bạn sẽ có một mục nhập cho Main-Class: MainClass
jkhosla

@PiniCheyni, 2 cách để tạo các lọ thực thi được giải thích rõ ở đây. docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Dinesh Kumar P

ở điểm 3, khi bạn gọi đó là java TheJavaFiletương đương với java TheJavaFile.class.. vì vậy bạn không thực thi tệp java như bạn đã nêu. bạn đang thực hiện các tập tin lớp. Các tệp java là các nguồn không thể thực thi được
user2914191

21

Trong trường hợp lớp Java của bạn nằm trong một số gói. Giả sử lớp Java của bạn có tên ABC.javalà có mặt com.hello.programs, thì bạn cần chạy nó với tên gói.

Biên dịch nó theo cách thông thường:

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

Nhưng để chạy nó, bạn cần cung cấp tên gói và sau đó là tên lớp java của bạn:

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

19

Khiếu nại một tệp Java để tạo một lớp:

javac filename.java

Thực hiện lớp được tạo:

java filename

Lưu ý rằng "tên tệp" của bạn thực sự là tên của một lớp. Java.exe sẽ tìm kiếm mọi tệp * .jar cho một lớp có tên này.
Doomjunky

@Doomjunky Bạn có thể giải thích nó, xin vui lòng? Điều đó là xấu hay tốt? Có nên đặt tên khác?
David Ferenczy Rogožan

9

Nó rất dễ dàng. Nếu bạn đã lưu tệp của mình dưới dạng A.text, điều đầu tiên bạn nên làm là lưu tệp đó là A.java. Bây giờ nó là một tệp Java.

Bây giờ bạn cần mở cmd và đặt đường dẫn đến tệp A.java của bạn trước khi biên dịch nó. bạn có thể tham khảo điều này cho điều đó.

Sau đó, bạn có thể biên dịch tệp của mình bằng lệnh

javac A.java

Sau đó chạy nó bằng cách sử dụng

java A

Vì vậy, đó là cách bạn biên dịch và chạy một chương trình java trong cmd. Bạn cũng có thể xem qua các tài liệu này là Java trong các bài học chuyên sâu. Rất nhiều điều bạn cần hiểu trong Java được trình bày ở đó cho người mới bắt đầu.


7

Bạn có thể biên dịch bất kỳ nguồn java nào bằng javac trong dòng lệnh; ví dụ: javac CopyFile.java. Để chạy: java CopyFile. Bạn cũng có thể biên dịch tất cả các tệp java bằng cách sử dụng javac * .java miễn là chúng nằm trong cùng một thư mục

Nếu bạn gặp sự cố dẫn đến "không thể tìm thấy hoặc tải lớp chính", bạn có thể không có jre trong đường dẫn của mình. Hãy xem câu hỏi này: Không thể tìm hoặc tải lớp chính


7

Giả sử tệp được gọi là "CopyFile.java", hãy làm như sau:

javac CopyFile.java
java -cp . CopyFile

Dòng đầu tiên biên dịch mã nguồn thành mã byte thực thi. Dòng thứ hai thực thi nó, đầu tiên thêm thư mục hiện tại vào đường dẫn lớp (chỉ trong trường hợp).


3
máy tính của tôi: người dùng bin $ java -cp. Lỗi Main. Class: Không thể tìm thấy hoặc tải lớp chính Main. Class
chrips


4

Trên Windows 7 tôi phải làm như sau:

đường tắt

  1. Cài đặt JDK http://www.oracle.com/technetwork/java/javase/doads
  2. trong windows, duyệt vào "C: \ Program Files \ Java \ jdk1.8.0_91 \ bin" (hoặc bất cứ nơi nào phiên bản mới nhất của JDK được cài đặt), nhấn giữ phím và nhấp chuột phải vào một vùng trống trong cửa sổ và mở "mở cửa sổ lệnh ở đây "và điều này sẽ cung cấp cho bạn một dòng lệnh và truy cập vào tất cả các công cụ BIN. "javac" không theo mặc định trong biến môi trường PATH của hệ thống windows.
  3. Theo dõi các nhận xét ở trên về cách biên dịch tệp ("javac MyFile.java" rồi "java MyFile") https://stackoverflow.com/a/33149828/194872

đường dài

  1. Cài đặt JDK http://www.oracle.com/technetwork/java/javase/doads/index.html
  2. Sau khi cài đặt, trong chỉnh sửa biến môi trường Windows PATH và thêm dòng sau vào đường dẫn C: \ ProgramData \ Oracle \ Java \ javapath. Trong thư mục này là các liên kết tượng trưng đến một số ít các tệp thực thi java nhưng "javac" KHÔNG phải là một trong số chúng vì vậy khi cố chạy "javac" từ dòng lệnh Windows, nó sẽ báo lỗi.
  3. Tôi đã chỉnh sửa đường dẫn: Bảng điều khiển -> Hệ thống -> tab Nâng cao -> nút "Biến môi trường ..." -> cuộn xuống "Đường dẫn", tô sáng và chỉnh sửa -> thay thế "C: \ ProgramData \ Oracle \ Java \ javapath "với đường dẫn trực tiếp đến thư mục java BIN" C: \ Program Files \ Java \ jdk1.8.0_91 \ bin ".
  4. Điều này có thể bị hỏng khi bạn nâng cấp cài đặt JDK nhưng bạn có quyền truy cập vào tất cả các công cụ dòng lệnh ngay bây giờ.

  5. Theo dõi các nhận xét ở trên về cách biên dịch tệp ("javac MyFile.java" rồi "java MyFile") https://stackoverflow.com/a/33149828/194872


2

nhập mô tả hình ảnh ở đây BƯỚC 1: ĐẦU TIÊN MỞ KHUYẾN MÃI THÔNG TIN Ở ĐÂU FILE CỦA BẠN ĐƯỢC NỘP. (nhấp chuột phải trong khi nhấn shift)
BƯỚC 2: THÌ SỬ DỤNG CÁC QUY TẮC SAU ĐỂ THỰC HIỆN. (giả sử tên tệp và tên lớp được thực thi được đặt tên là Student.java) Chương trình ví dụ nằm trong nền ảnh.

     javac Student.java
     java Student

nhập mô tả hình ảnh ở đây


1

Kể từ Java 9, JDK bao gồm jshell, REPL Java.

Giả sử thư mục JDK 9+ binđược thêm chính xác vào đường dẫn của bạn, bạn sẽ có thể chỉ cần:

  1. Chạy jshell File.java- File.javalà tập tin của bạn tất nhiên.
  2. Một dấu nhắc sẽ mở ra, cho phép bạn gọi mainphương thức : jshell> File.main(null).
  3. Để đóng lời nhắc và kết thúc phiên JVM, hãy sử dụng /exit

Tài liệu đầy đủ cho JShell có thể được tìm thấy ở đây .


1

Bây giờ (với JDK 9 trở đi), bạn chỉ có thể sử dụng java để thực hiện điều đó. Để thực thi "Hello.java" có chứa chính, người ta có thể sử dụng: java Hello.java

Bạn không cần phải biên dịch bằng cách sử dụng javac riêng nữa.


Tính năng này đã được thêm vào trong JDK 11.
Holger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.