如何在Windows命令行上运行Java程序?

258

我正在尝试在Windows命令行中执行一个Java程序。
这是我的代码:

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是一次编写,到处运行)?


40
使用命令javac CopyFile.java编译CopyFile.java文件,然后使用命令java CopyFile运行程序。 - Nir Alfasi
1
@Elizabeth Turner 首先,您必须确保已安装JRE(Java运行时环境),并且它可以从每个文件夹访问(Java / Javac的路径包含在PATH env变量中)。然后从CopyFile.java所在的同一文件夹中运行我上面写的命令。 - Nir Alfasi
@ARJUN,你的链接已经失效了。它似乎指向了一个垃圾邮件网站。 - Anders
请查看JEP 330以获取有关将Java程序运行为shell或Python脚本的更多信息。 - Anders
@elizabeth-turner,你不需要将文本文件放在Java程序的相同位置。但是,你应该使用main方法的参数来告诉它在哪里,然后将文件路径添加到命令行中。例如,dirlscopycp都可以使用。 - Anders
显示剩余6条评论
13个回答

264

来源: 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,请检查设置路径命令。如果javac可以运行,但您遇到错误,请检查Java文本。如果程序编译成功但出现异常,请检查文件名和类名以及java HelloWorld命令中的拼写和大小写。Java是大小写敏感的!


40
我遇到的问题是当我尝试运行编译器时,出现了一个错误信息:“无法找到或加载主类CopyFile”。 - Elizabeth Turner
3
如果您有包含CopyFile.class文件的文件夹作为当前目录,请尝试输入"java -cp . CopyFile"。否则,请输入"java -cp FULLPATH CopyFile",其中FULLPATH是CopyFile.class所在位置的完整路径。 - Nicholas Kadaeux
3
缺失的内容:如果类声明为属于特定包(package),则必须将.class文件放置在相应的目录结构中。当前目录是默认的类路径(classpath),因此不需要手动设置-cp . - Artur Czajka
2
当然,你应该使用一个包:package mypackage; 然后进入你的项目名称/。运行java mypackage.Main。 - chrips
2
@ElizabethTurner,我也遇到了同样的错误,原因是我打开了祖父文件夹,并在代码开始时使用了带有本地包的项目。结果:我在工作目录中有多个项目。如果您在代码文件的前几行中使用package [projectfoldername];,则必须在“项目文件夹之外”使用java [projectfoldername]\xyz.java,并且使用该包结构运行类之后。例如,请参见https://dev59.com/7GDVa4cB1Zd3GeqPcEw1 - questionto42
显示剩余3条评论

119
完成回答的步骤如下:
  1. Java文件

    TheJavaFile.java
    
    编译Java文件为*.class文件。
  2. javac TheJavaFile.java
    
    • 这将创建一个TheJavaFile.class文件
  3. 执行Java文件

  4. java TheJavaFile
    
  5. 创建可执行的*.jar文件

    • 这里有两个选项 -

      1. 使用外部清单文件:

        • 创建清单文件,例如 - MANIFEST.mf

        • MANIFEST文件只是主类的明确条目

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

      2. 通过入口点执行:

        • jar -cvfe TheJavaFile.jar <MainClass> TheJavaFile.class
  6. 运行Jar文件

  7. java -jar TheJavaFile.jar
    

6
请问您能否展示MANIFEST.mf的内容?因为当我尝试“按入口点可执行”时,它显示找不到主类。 - Pini Cheyni
如果您的类名为MainClass,则清单文件将有一个Main-Class条目:MainClass。 - jkhosla
@PiniCheyni,这里很好地解释了创建可执行 Jar 文件的两种方式。 https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html - Dinesh Kumar P
在第三点上,当你调用java TheJavaFile时,这相当于java TheJavaFile.class。所以你并没有像你所说的那样执行Java文件,而是执行了类文件。Java文件是源文件,不可执行。 - user2914191

27

25

编译Java文件以生成类:

javac filename.java

执行生成的类:

java filename

请注意,你的“filename”实际上是一个类的名称。java.exe将在每个*.jar文件中搜索这个名称的类。 - Doomjunky
@Doomjunky,你能解释一下吗?这是好还是坏?应该起一个不同的名字吗? - David Ferenczy Rogožan

23

如果您的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

适用于Java 8。 - srghma

12

假设文件名为"CopyFile.java",请执行以下步骤:

javac CopyFile.java
java -cp . CopyFile

第一行将源代码编译为可执行的字节码。第二行执行它,首先将当前目录添加到类路径中(以防万一)。


5
我的电脑:bin用户$ java -cp . Main.class 错误: 找不到或无法加载主类Main.class - chrips

9
很容易。如果您已将文件保存为A.text,那么第一件要做的事情是将其保存为A.java。现在它是一个Java文件。
现在需要打开cmd并将路径设置为A.java文件,然后编译它。可以参考这个链接
然后可以使用以下命令编译文件:
javac A.java
再使用以下命令运行:
java A
这就是如何在cmd中编译和运行Java程序。您还可以阅读这些教材,深入了解Java的许多基础知识。

8
您可以使用命令行中的javac编译任何Java源代码;例如,javac CopyFile.java。 运行:java CopyFile。 只要它们在同一个目录中,您也可以使用javac *.java编译所有Java文件。
如果出现“找不到或加载主类”的问题,则可能没有将jre添加到您的路径中。请参考此问题: Could not find or load main class

4
在Windows 7上,我需要执行以下操作:
快速方式
1. 安装JDK http://www.oracle.com/technetwork/java/javase/downloads 2. 在Windows中,浏览到"C:\Program Files\Java\jdk1.8.0_91\bin"(或其他最新版本的JDK所在位置),按住Shift并右键单击窗口内的空白区域,选择“在此处打开命令窗口”,这将为您提供一个命令行和访问所有BIN工具的权限。 "javac"不在Windows系统PATH环境变量中。 3. 按照上面的评论编译文件("javac MyFile.java"然后"java MyFile")https://dev59.com/0WQo5IYBdhLWcg3wVuGP#33149828 冗长方式
4. 安装JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html 5. 安装后,编辑Windows PATH环境变量,并将以下内容添加到路径C:\ProgramData\Oracle\Java\javapath。该文件夹中有一些Java可执行文件的符号链接但其中没有"javac",因此在尝试从Windows命令行运行"javac"时会出现错误。 6. 编辑路径:控制面板->系统->高级选项卡->"环境变量..."按钮->向下滚动到"Path",选择并编辑->将"C:\ProgramData\Oracle\Java\javapath"替换为指向Java BIN文件夹"C:\Program Files\Java\jdk1.8.0_91\bin"的直接路径。 7. 这可能会在升级JDK安装时出现问题,但现在您可以访问所有命令行工具了。 8. 按照上面的评论编译文件("javac MyFile.java"然后"java MyFile")https://dev59.com/0WQo5IYBdhLWcg3wVuGP#33149828

3

enter image description here 步骤1:在文件所在位置打开命令提示符。(按住Shift键右键单击)
步骤2:然后使用以下命令执行。(假设要执行的文件和类名为Student.java)示例程序在图片背景中。

     javac Student.java
     java Student

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接