How do I run a Java program from the command line on Windows?

Java

Java Problem Overview


I'm trying to execute a Java program from the command line in Windows. Here is my code:

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

I'm not sure how to execute the program - any help? Is this possible on Windows? Why is it different than another environment (I thought JVM was write once, run anywhere)?

Java Solutions


Solution 1 - Java

Source: 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!

Solution 2 - Java

To complete the answer :

  1. The Java File

     TheJavaFile.java
    
  2. Compile the Java File to a *.class file

     javac TheJavaFile.java
    
    • This will create a TheJavaFile.class file
  3. Execution of the Java File

     java TheJavaFile
    
  4. Creation of an executable *.jar file

    • You've got two options here -

      1. With an external manifest file :

        • Create the manifest file say - MANIFEST.mf

        • The MANIFEST file is nothing but an explicit entry of the Main Class

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

      2. Executable by Entry Point:

        • jar -cvfe TheJavaFile.jar <MainClass> TheJavaFile.class
  5. To run the Jar File

     java -jar TheJavaFile.jar
    

Solution 3 - Java

Complile a Java file to generate a class:

javac filename.java

Execute the generated class:

java filename

Solution 4 - Java

In case your Java class is in some package. Suppose your Java class named ABC.java is present in com.hello.programs, then you need to run it with the package name.

Compile it in the usual way:

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

But to run it, you need to give the package name and then your java class name:

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

Solution 5 - Java

Since Java 11, java command line tool has been able to run a single-file source-code directly. e.g.

java HelloWorld.java

This was an enhancement with JEP 330: https://openjdk.java.net/jeps/330

For the details of the usage and the limitations, see the manual of your Java implementation such as one provided by Oracle: https://docs.oracle.com/en/java/javase/11/tools/java.html

Solution 6 - Java

Assuming the file is called "CopyFile.java", do the following:

javac CopyFile.java
java -cp . CopyFile

The first line compiles the source code into executable byte code. The second line executes it, first adding the current directory to the class path (just in case).

Solution 7 - Java

It is easy. If you have saved your file as A.text first thing you should do is save it as A.java. Now it is a Java file.

Now you need to open cmd and set path to you A.java file before compile it. you can refer this for that.

Then you can compile your file using command

> javac A.java

Then run it using

> java A

So that is how you compile and run a java program in cmd. You can also go through these material that is Java in depth lessons. Lot of things you need to understand in Java is covered there for beginners.

Solution 8 - Java

You can compile any java source using javac in command line ; eg, javac CopyFile.java. To run : java CopyFile. You can also compile all java files using javac *.java as long as they're in the same directory

If you're having an issue resulting with "could not find or load main class" you may not have jre in your path. Have a look at this question: https://stackoverflow.com/questions/7647448/could-not-find-or-load-main-class

Solution 9 - Java

On Windows 7 I had to do the following:

quick way

  1. Install JDK http://www.oracle.com/technetwork/java/javase/downloads
  2. in windows, browse into "C:\Program Files\Java\jdk1.8.0_91\bin" (or wherever the latest version of JDK is installed), hold down shift and right click on a blank area within the window and do "open command window here" and this will give you a command line and access to all the BIN tools. "javac" is not by default in the windows system PATH environment variable.
  3. Follow comments above about how to compile the file ("javac MyFile.java" then "java MyFile") https://stackoverflow.com/a/33149828/194872

long way

  1. Install JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html

  2. After installing, in edits the Windows PATH environment variable and adds the following to the path C:\ProgramData\Oracle\Java\javapath. Within this folder are symbolic links to a handful of java executables but "javac" is NOT one of them so when trying to run "javac" from Windows command line it throws an error.

  3. I edited the path: Control Panel -> System -> Advanced tab -> "Environment Variables..." button -> scroll down to "Path", highlight and edit -> replaced the "C:\ProgramData\Oracle\Java\javapath" with a direct path to the java BIN folder "C:\Program Files\Java\jdk1.8.0_91\bin".

  4. This likely breaks when you upgrade your JDK installation but you have access to all the command line tools now.

  5. Follow comments above about how to compile the file ("javac MyFile.java" then "java MyFile") https://stackoverflow.com/a/33149828/194872

Solution 10 - Java

enter image description here STEP 1: FIRST OPEN THE COMMAND PROMPT WHERE YOUR FILE IS LOCATED. (right click while pressing shift)
STEP 2: THEN USE THE FOLLOWING COMMANDS TO EXECUTE. (lets say the file and class name to be executed is named as Student.java)The example program is in the picture background.

     javac Student.java
     java Student

enter image description here

Solution 11 - Java

As of Java 9, the JDK includes jshell, a Java REPL.

Assuming the JDK 9+ bin directory is correctly added to your path, you will be able to simply:

  1. Run jshell File.javaFile.java being your file of course.
  2. A prompt will open, allowing you to call the main method: jshell> File.main(null).
  3. To close the prompt and end the JVM session, use /exit

Full documentation for JShell can be found here.

Solution 12 - Java

Now (with JDK 9 onwards), you can just use java to get that executed. In order to execute "Hello.java" containing the main, one can use: java Hello.java

You do not need to compile using separately using javac anymore.

Solution 13 - Java

You can actually run Java program as you would shell or python scripts without manually compile the Java file, as described in [JEP 330][jep330]. That is available since JDK 11.

If you create a file testing, and put the following you should be able to run it as command testing. You need to make it executable in Linux and Mac OSX with chmod +x testing.

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

You are not allowed to use the file extension .java in the previous example.

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

But you can still execute if it is was name Test.java without the shebang "#!" prefix like this:

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

Then execute the file Test.java with following command:

    $ java Test.java
    Hello again!
    $

So this works as long as you have a new enough Java compiler in the path, check with java -version. More information in this [blog][blog].

[jep330]: https://openjdk.java.net/jeps/330 "Java JEP 330: Launch Single-File Source-Code Programs" [blog]: https://www.infoq.com/articles/single-file-execution-java11 "Running Single-file Programs without Compiling in Java 11"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionElizabeth TurnerView Question on Stackoverflow
Solution 1 - JavaNicholas KadaeuxView Answer on Stackoverflow
Solution 2 - JavajkhoslaView Answer on Stackoverflow
Solution 3 - JavaParesh3489227View Answer on Stackoverflow
Solution 4 - JavaHarshad HolkarView Answer on Stackoverflow
Solution 5 - JavaakawagucView Answer on Stackoverflow
Solution 6 - JavaYakovKView Answer on Stackoverflow
Solution 7 - JavaEliza HelenaView Answer on Stackoverflow
Solution 8 - JavamonikaView Answer on Stackoverflow
Solution 9 - JavaChris SmithView Answer on Stackoverflow
Solution 10 - JavaAshwant ManikothView Answer on Stackoverflow
Solution 11 - JavaHorseyView Answer on Stackoverflow
Solution 12 - JavaShibaView Answer on Stackoverflow
Solution 13 - JavaAndersView Answer on Stackoverflow