Como executo um programa Java a partir da linha de comando no Windows?

216

Estou tentando executar um programa Java na linha de comando do Windows. Aqui está o meu código:

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

Não sei como executar o programa - alguma ajuda? Isso é possível no Windows? Por que é diferente de outro ambiente (pensei que a JVM fosse escrita uma vez, executada em qualquer lugar)?

Elizabeth Turner
fonte
33
javac CopyFile.javae entãojava CopyFile
alfasin
Estou na linha de comando agora, preciso salvar meus arquivos txt na mesma pasta que o programa para que eles sejam chamados?
Elizabeth Turner
Qual pacote CopyFilereside?
MadProgrammer
1
@Elizabeth Turner primeiro, você deve certificar-se de que instalou o JRE (Java Runtime Env) e que seja acessível de todas as pastas (o caminho para Java / Javac está incluído na variável env PATH). Em seguida, execute os comandos que escrevi acima na mesma pasta em que o CopyFile.java está localizado.
Alfasin

Respostas:

240

Fonte: javaindos.

Digamos que seu arquivo esteja em C: \ mywork \

Executar prompt de comando

C:\> cd \mywork

Isso faz de C: \ mywork o diretório atual.

C:\mywork> dir

Isso exibe o conteúdo do diretório. Você deverá ver o nome do arquivoaqui.java entre os arquivos.

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

Isso informa ao sistema onde encontrar os programas JDK.

C:\mywork> javac filenamehere.java

Isso executa o javac.exe, o compilador. Você não verá nada além do próximo prompt do sistema ...

C:\mywork> dir

javac criou o arquivo filenamehere.class. Você deve ver filenamehere.java e filenamehere.class entre os arquivos.

C:\mywork> java filenamehere

Isso executa o interpretador Java. Você deve ver a saída do seu programa.

Se o sistema não conseguir encontrar o javac, verifique o comando set path. Se o javac for executado, mas você obtiver erros, verifique seu texto Java. Se o programa compilar, mas você receber uma exceção, verifique a ortografia e letras maiúsculas no nome do arquivo, no nome da classe e no comando java HelloWorld. Java faz distinção entre maiúsculas e minúsculas!

Nicholas Kadaeux
fonte
27
O im questão tendo é quando eu tento executar o compilador eu recebo um erro "não foi possível encontrar ou carregar CopyFile classe principal
Elizabeth Turner
2
Se você tiver a pasta que contém CopyFile.class definido como o diretório atual, simplesmente tentar "java -cp CopyFile." Caso contrário "java -cp FULLPATH CopyFile"
Nicholas Kadaeux
Como eu criaria um arquivo em lotes que compila e executa o código, mas, se já havia sido compilado antes, basta iniciá-lo?
desenvolvedor android
2
O que está faltando: se a classe foi declarada em um determinado pacote, você deve colocar o .classarquivo na estrutura de diretórios apropriada. O diretório atual é o caminho de classe padrão, portanto você não precisa definir -cp .manualmente.
Artur Czajka #
2
Com certeza, você deve usar um pacote: package mypackage; então vá para o seu nome do projeto /. Run java mypackage.Main
chrips
108

Para completar a resposta:

  1. O arquivo Java

    TheJavaFile.java
  2. Compile o arquivo Java em um arquivo * .class

    javac TheJavaFile.java
    • Isso criará um TheJavaFile.classarquivo
  3. Execução do arquivo Java

    java TheJavaFile
  4. Criação de um *.jararquivo executável

    • Você tem duas opções aqui -

      1. Com um arquivo de manifesto externo:

        • Crie o arquivo de manifesto, digamos - MANIFEST.mf

        • O arquivo MANIFEST nada mais é do que uma entrada explícita da classe principal

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

      2. Executável por ponto de entrada:

        • jar -cvfe TheJavaFile.jar <MainClass> TheJavaFile.class
  5. Para executar o arquivo jar

    java -jar TheJavaFile.jar
jkhosla
fonte
5
por favor você pode mostrar o conteúdo de MANIFEST.MF, porque quando eu tento "executável pelo ponto de entrada" diz a classe principal não pode ser encontrado
Pini Cheyni
@Pini Cheyni Se sua classe é chamado de MainClass então o seu arquivo de manifesto terá uma entrada para o MainClass: MainClass
jkhosla
@PiniCheyni, As 2 maneiras de criar jars executáveis ​​são bem explicadas aqui. docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Dinesh Kumar P
no ponto 3, quando você chama java TheJavaFileisso é equivalente a java TheJavaFile.class... para que você não esteja executando o arquivo java como você afirmou. você está executando o arquivo de classe. arquivos java são fontes que não são executáveis
user2914191
21

Caso sua classe Java esteja em algum pacote. Suponha que sua classe Java nomeada ABC.javaesteja presente emcom.hello.programs , então você precisa executá-la com o nome do pacote.

Compile da maneira usual:

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

Mas, para executá-lo, você precisa fornecer o nome do pacote e o nome da sua classe java:

C:\SimpleJavaProject\src > java com.hello.programs.ABC
Harshad Holkar
fonte
19

Complete um arquivo Java para gerar uma classe:

javac filename.java

Execute a classe gerada:

java filename
Paresh3489227
fonte
Observe que seu "nome do arquivo" é realmente o nome de uma classe. O java.exe procurará em cada arquivo * .jar por uma classe com esse nome.
Doomjunky
@Doomjunky Você poderia explicar, por favor? Isso é bom ou ruim? Deveria ter um nome diferente?
David Ferenczy Rogožan
9

Isso é fácil. Se você salvou seu arquivo como A.text, a primeira coisa a fazer é salvá-lo como A.java. Agora é um arquivo Java.

Agora você precisa abrir o cmd e definir o caminho para o seu arquivo A.java antes de compilá-lo. você pode consultar isso para isso.

Então você pode compilar seu arquivo usando o comando

javac A.java

Em seguida, execute-o usando

java A

Então é assim que você compila e executa um programa java no cmd. Você também pode passar por esse material que é Java em profundidade. Muitas coisas que você precisa entender em Java são abordadas aqui para iniciantes.

Eliza Helena
fonte
7

Você pode compilar qualquer fonte java usando javac na linha de comando; por exemplo, javac CopyFile.java. Para executar: java CopyFile. Você também pode compilar todos os arquivos java usando javac * .java, desde que estejam no mesmo diretório

Se você está tendo um problema resultante de "não foi possível encontrar ou carregar a classe principal", talvez não tenha o jre no caminho. Dê uma olhada nesta pergunta: Não foi possível encontrar ou carregar a classe principal

monika
fonte
7

Supondo que o arquivo seja chamado "CopyFile.java", faça o seguinte:

javac CopyFile.java
java -cp . CopyFile

A primeira linha compila o código-fonte em código de bytes executável. A segunda linha o executa, adicionando primeiro o diretório atual ao caminho da classe (apenas no caso).

YakovK
fonte
3
mycomputer: usuário bin $ java -cp. Erro Main.class: Não foi possível encontrar ou carregar a classe principal Main.class
chrips
5

Desde o Java 11, a javaferramenta de linha de comando conseguiu executar um código-fonte de arquivo único diretamente. por exemplo

java HelloWorld.java

Este foi um aprimoramento com o JEP 330: https://openjdk.java.net/jeps/330

Para obter detalhes sobre o uso e as limitações, consulte o manual da sua implementação Java, como o fornecido pela Oracle: https://docs.oracle.com/en/java/javase/11/tools/java.html

akawaguc
fonte
4

No Windows 7, tive que fazer o seguinte:

Atalho

  1. Instale o JDK http://www.oracle.com/technetwork/java/javase/downloads
  2. no Windows, navegue até "C: \ Arquivos de programas \ Java \ jdk1.8.0_91 \ bin" (ou onde quer que a versão mais recente do JDK esteja instalada), mantenha pressionada a tecla Shift e clique com o botão direito do mouse em uma área em branco na janela e abra " janela de comando aqui "e isso fornecerá uma linha de comando e acesso a todas as ferramentas BIN. "javac" não é por padrão na variável de ambiente PATH do sistema Windows.
  3. Siga os comentários acima sobre como compilar o arquivo ("javac MyFile.java" e "java MyFile") https://stackoverflow.com/a/33149828/194872

longo caminho

  1. Instale o JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html
  2. Após a instalação, edita a variável de ambiente PATH do Windows e adiciona o seguinte ao caminho C: \ ProgramData \ Oracle \ Java \ javapath. Dentro desta pasta há links simbólicos para um punhado de executáveis ​​java, mas "javac" NÃO é um deles portanto, ao tentar executar "javac" na linha de comando do Windows, gera um erro.
  3. Editei o caminho: Painel de controle -> Sistema -> guia Avançado -> botão "Variáveis ​​de ambiente ..." -> role para baixo até "Caminho", destaque e edite -> substitui o "C: \ ProgramData \ Oracle \ Java \ javapath "com um caminho direto para a pasta BIN java" C: \ Arquivos de Programas \ Java \ jdk1.8.0_91 \ bin ".
  4. É provável que isso ocorra quando você atualiza sua instalação do JDK, mas agora você tem acesso a todas as ferramentas de linha de comando.

  5. Siga os comentários acima sobre como compilar o arquivo ("javac MyFile.java" e "java MyFile") https://stackoverflow.com/a/33149828/194872

Chris Smith
fonte
2

insira a descrição da imagem aqui PASSO 1: ABRA PRIMEIRO O PROMPT DE COMANDO ONDE SEU ARQUIVO ESTÁ LOCALIZADO. (clique com o botão direito do mouse enquanto pressiona Shift)
ETAPA 2: ENTÃO USE OS SEGUINTES COMANDOS PARA EXECUTAR. (digamos que o nome do arquivo e da classe a ser executado seja nomeado como Student.java) O programa de exemplo está em segundo plano.

     javac Student.java
     java Student

insira a descrição da imagem aqui

Manikoth Ashwant
fonte
1

A partir do Java 9, o JDK inclui jshellum Java REPL.

Supondo que o bindiretório JDK 9+ seja adicionado corretamente ao seu caminho, você poderá:

  1. Executar jshell File.java- File.javasendo seu arquivo, é claro.
  2. Um prompt será aberta, permitindo que você chamar o mainmétodo: jshell> File.main(null).
  3. Para fechar o prompt e finalizar a sessão da JVM, use /exit

A documentação completa do JShell pode ser encontrada aqui .

Horsey
fonte
1

Agora (com o JDK 9 em diante), você pode apenas usar o java para executá-lo. Para executar "Hello.java" contendo o principal, pode-se usar: java Hello.java

Você não precisa mais compilar usando o javac separadamente.

Shiba
fonte
Esta característica foi adicionada em JDK 11.
Holger