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


当前回答

编译一个Java文件来生成一个类:

javac filename.java

执行生成的类:

java filename

其他回答

来源:javaindos。

Let's say your file is in C:\mywork\ Run Command Prompt C:\> cd \mywork This makes C:\mywork the current directory. C:\mywork> dir This displays the directory contents. You should see filenamehere.java among the files. C:\mywork> set path=%path%;C:\Program Files\Java\jdk1.5.0_09\bin This tells the system where to find JDK programs. C:\mywork> javac filenamehere.java This runs javac.exe, the compiler. You should see nothing but the next system prompt... C:\mywork> dir javac has created the filenamehere.class file. You should see filenamehere.java and filenamehere.class among the files. C:\mywork> java filenamehere This runs the Java interpreter. You should then see your program output. If the system cannot find javac, check the set path command. If javac runs but you get errors, check your Java text. If the program compiles but you get an exception, check the spelling and capitalization in the file name and the class name and the java HelloWorld command. Java is case-sensitive!

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

你不再需要单独使用javac进行编译。

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

如果你有一个问题导致“无法找到或加载主类”,你可能没有 Jre在你的路径。看看这个问题: 无法找到或加载主类

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

如果您创建了一个测试文件,并放入以下内容,您应该能够将其作为命令测试运行。您需要使用chmod +x测试使其在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检查。更多信息请见本博客。

从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