【问题标题】:How do I run a Java program from the command line on Windows?如何在 Windows 上从命令行运行 Java 程序?
【发布时间】:2013-04-14 19:12:24
【问题描述】:

我正在尝试从 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 是一次编写,随处运行)?

【问题讨论】:

  • javac CopyFile.java 然后java CopyFile
  • 我现在在命令行中,我需要将我的 txt 文件保存在与程序相同的文件夹中以便调用它们吗?
  • CopyFile 驻留什么包
  • @Elizabeth Turner 首先,您必须确保已安装 JRE(Java 运行时环境)并且可以从每个文件夹访问它(Java/Javac 的路径包含在 PATH 环境变量中)。然后从 CopyFile.java 所在的同一个文件夹中运行我上面写的命令。

标签: java


【解决方案1】:

来源: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 区分大小写!

【讨论】:

  • 我遇到的问题是当我尝试运行编译器时出现错误“无法找到或加载主类 CopyFile
  • 如果您将包含 CopyFile.class 的文件夹设置为当前目录,只需尝试 "java -cp . CopyFile" 否则 "java -cp FULLPATH CopyFile"
  • 缺少什么:如果该类被声明在某个包中,那么您必须将.class 文件放在适当的目录结构中。当前目录是默认的classpath,所以不用手动设置-cp .
  • 当然,你应该使用一个包:package mypackage;然后转到您的 projectname/ 。运行 java mypackage.Main
  • @ElizabethTurner,我遇到了同样的错误,这是因为我打开了祖父文件夹,并且在代码开头使用了带有本地包的项目。结果:我在工作目录中有多个项目。如果您在代码文件的第一行中使用 package [projectfoldername];,则必须使用 java [projectfoldername]\xyz.java “在项目文件夹之外”,并使用该包的文件夹结构之后您还可以运行该类。参见例如stackoverflow.com/questions/9234488/…
【解决方案2】:

您可以在命令行中使用 javac 编译任何 java 源代码;例如,javac CopyFile.java。 运行:java CopyFile。 您也可以使用 javac *.java 编译所有 java 文件,只要它们位于同一目录中即可

如果您遇到“无法找到或加载主类”的问题,您可能没有 jre 在你的道路上。看看这个问题: Could not find or load main class

【讨论】:

    【解决方案3】:

    编译 Java 文件以生成类:

    javac filename.java
    

    执行生成的类:

    java filename
    

    【讨论】:

    • 请注意,您的“文件名”实际上是一个类的名称。 java.exe 将在每个 *.jar 文件中搜索该名称的类。
    • @Doomjunky 你能解释一下吗?那是坏的还是好的?应该换个名字吗?
    【解决方案4】:

    完成答案:

    1. Java 文件

      TheJavaFile.java
      
    2. 将 Java 文件编译为 *.class 文件

      javac TheJavaFile.java
      
      • 这将创建一个TheJavaFile.class 文件
    3. Java 文件的执行

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

      • 这里有两个选项 -

        1. 使用外部清单文件:

          • 创建清单文件说 - MANIFEST.mf

          • MANIFEST 文件不过是主类的显式条目

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

        2. 可由入口点执行:

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

      java -jar TheJavaFile.jar
      

    【讨论】:

    • 能否请您显示 MANIFEST.mf 的内容,因为当我尝试“由入口点执行”时,它说找不到主类
    • @Pini Cheyni 如果您的课程被称为 MainClass,那么您的清单文件将包含 Main-Class 的条目:MainClass
    • @PiniCheyni,这里很好地解释了创建可执行 jar 的 2 种方法。 docs.oracle.com/javase/tutorial/deployment/jar/appman.html
    • 在第 3 点,当您调用 java TheJavaFile 时,这相当于 java TheJavaFile.class.. 所以您没有像您所说的那样执行 java 文件。你正在执行类文件。 java 文件是不可执行的源
    【解决方案5】:

    这很容易。如果您已将文件保存为 A.text,您首先应该将其保存为 A.java。现在它是一个 Java 文件。

    现在您需要在编译之前打开 cmd 并设置 A.java 文件的路径。你可以参考this

    然后你可以使用命令编译你的文件

    javac A.java

    然后使用运行它

    java 一个

    这就是在 cmd 中编译和运行 java 程序的方式。 您还可以通过这些material 深入了解 Java 课程。那里为初学者介绍了很多你需要了解的 Java 知识。

    【讨论】:

      【解决方案6】:

      在 Windows 7 上,我必须执行以下操作:

      快捷方式

      1. 安装JDKhttp://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. 按照上面的 cmets 了解如何编译文件(“javac MyFile.java”然后“java MyFile”)https://stackoverflow.com/a/33149828/194872

      任重道远

      1. 安装JDKhttp://www.oracle.com/technetwork/java/javase/downloads/index.html
      2. 安装后,在编辑 Windows PATH 环境变量并将以下内容添加到路径 C:\ProgramData\Oracle\Java\javapath。此文件夹中包含指向少数 java 可执行文件的符号链接但“javac”不是其中之一,因此当尝试从 Windows 命令行运行“javac”时会引发错误。
      3. 我编辑了路径:控制面板->系统->高级选项卡->“环境变量...”按钮->向下滚动到“路径”,突出显示并编辑->替换为“C:\ProgramData\Oracle \Java\javapath”,带有指向 java BIN 文件夹“C:\Program Files\Java\jdk1.8.0_91\bin”的直接路径。
      4. 当您升级 JDK 安装但您现在可以访问所有命令行工具时,这可能会中断。

      5. 按照上面的 cmets 了解如何编译文件(“javac MyFile.java”然后“java MyFile”)https://stackoverflow.com/a/33149828/194872

      【讨论】:

        【解决方案7】:

        如果您的 Java 类在某个包中。假设 com.hello.programs 中存在名为 ABC.java 的 Java 类,那么您需要使用包名运行它。

        用通常的方式编译它:

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

        但是要运行它,你需要给出包名,然后是你的 java 类名:

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

        【讨论】:

          【解决方案8】:

          假设文件名为“CopyFile.java”,请执行以下操作:

          javac CopyFile.java
          java -cp . CopyFile
          

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

          【讨论】:

          • mycomputer:bin user$ java -cp 。 Main.class 错误:无法找到或加载主类 Main.class
          【解决方案9】:

          第 1 步:首先打开文件所在的命令提示符。 (按住shift的同时右键)
          第 2 步:然后使用以下命令执行。 (假设要执行的文件和类名为Student.java)示例程序在图片背景中。

               javac Student.java
               java Student
          

          【讨论】:

            【解决方案10】:

            从 Java 9 开始,JDK 包括 jshell,一个 Java REPL。

            假设 JDK 9+ bin 目录已正确添加到您的路径中,您将能够简单地:

            1. 运行jshell File.javaFile.java 当然是你的文件。
            2. 将打开一个提示,允许您调用main 方法:jshell> File.main(null)
            3. 要关闭提示并结束 JVM 会话,请使用 /exit

            可以在here找到完整的 JShell 文档。

            【讨论】:

              【解决方案11】:

              现在(从 JDK 9 开始),您可以使用 java 来执行它。 为了执行包含 main 的“Hello.java”,可以使用: java Hello.java

              您不再需要使用 javac 单独编译。

              【讨论】:

              • JDK 11 已添加此功能。
              【解决方案12】:

              从 Java 11 开始,java 命令行工具已经能够直接运行单文件源代码。例如

              java HelloWorld.java
              

              这是 JEP 330 的增强功能:https://openjdk.java.net/jeps/330

              有关用法和限制的详细信息,请参阅您的 Java 实现手册,例如 Oracle 提供的手册:https://docs.oracle.com/en/java/javase/11/tools/java.html

              【讨论】:

                【解决方案13】:

                您实际上可以像运行 shell 或 python 脚本一样运行 Java 程序,而无需手动编译 Java 文件,如中所述 JEP 330。从 JDK 11 开始就可以使用了。

                如果您创建一个文件testing,并输入以下内容,您应该能够将其作为命令testing 运行。您需要使用 chmod +x testing 使其在 Linux 和 Mac OSX 中可执行。

                    #!/usr/bin/env java --source 11
                    public class Test {
                        public static void main(String [] args) {
                            System.out.println("Hello world!");
                            System.exit(0);
                        }
                    }
                

                不允许在前面的示例中使用文件扩展名.java

                    $ chmod +x testing
                    $ ./testing
                    Hello world!
                    $
                

                但是如果是名称Test.java 没有shebang“#!”,您仍然可以执行像这样的前缀:

                    public class Test {
                        public static void main(String [] args) {
                            System.out.println("Hello again!");
                            System.exit(0);
                        }
                    }
                

                然后使用以下命令执行文件Test.java

                    $ java Test.java
                    Hello again!
                    $
                

                因此,只要路径中有足够新的 Java 编译器,此方法就可以工作,请使用 java -version 检查。更多信息请参见blog

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-10-25
                  • 1970-01-01
                  • 2012-04-10
                  • 1970-01-01
                  相关资源
                  最近更新 更多