Gravar cd em java

Olá!

Estou desenvolvendo um aplicativo que precisa gravar um cd com alguns arquivos(imagens, videos, etc…).

Eu aqui mesmo alguem falando sobre o JIIC(Java Image Iso Creator), porém como gravar a imagem criada poe ele no cd via java ou CMD???

Obrigado pela atenção:!:

Nossa, nao sabia que dava pra fazer isso com java… Java é bastante diverso nessas coisas!

No Java você pode até gerar o ISO (que é um arquivo binário como outro qualquer), porém, não pode gravar o CD.

Para gravar o CD, baixe um aplicativo como o Nero ou o Roxio, e então use a interface de linha de comando deles através do Runtime.exec. Mas dê adeus ao multiplataforma.

Olá VinyGodoy!

Eu já baixei o Nero e já estou explorando o neroCmd.exe…
Quando utilizo-o via cmd ele funciona normalmente…
porém quando utilizo-o via Java(com o Runtime.exec) ele não passa os parametros…

Dá um erro como se eu não estivesse passado parametro algum para o nerocmd…

Tem alguma dica sobre isso???

Obrigado pela atenção:!::!:

Fica com DEUS:!:

E parabéns por todo o seu conhecimento te admiro muito:!:

Já tentou usar a classe ProcessBuilder? Ele dá mais controle que o Runtime.exec.

Ainda não vou estudá0la um pouco e qualquer coisa retorno…

Obrigado pela Atenção e fica com DEUS:!:

Complementando o Vinícius, leia esse artigo aqui:

Leitura obrigatória para quem quer trabalhar com processos externos em Java.

[]'s

Obrigadão pelas respostas!!

Irei implementar meu codigo e quando terminá-lo postarei aqui, pois outras pessoas podem esta com este mesmo problema…

Fiquem com DEUS:!:

Galera obrigado pelas dicas!!!

O meu codigo ainda está em desenvolvimento mas para inicio já está bom!

Vejam um exemplo já utilizando o NeroCmd:

[code]import java.io.*;
import javax.swing.JOptionPane;

/**
*

  • @author Lan Dantas
    */
    public class Runtime2 {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      try {
      String cmds[] = new String[]{“C:/program files/nero/nero 11/nero burning rom/nerocmd.exe”, “–listdrives”};
      Process processo = new ProcessBuilder(cmds).start();
      InputStream IS = processo.getInputStream();
      InputStreamReader ISR = new InputStreamReader(IS);
      BufferedReader BR = new BufferedReader(ISR);
      String linha;
      System.out.println(“Saida do processo1:”);
      while ((linha = BR.readLine()) != null) {
      System.out.println(linha);
      }
      } catch (Exception e) {
      JOptionPane.showMessageDialog(null, “Erro:\n”+e.getMessage());
      }
      }
      }[/code]

Espero que ajudem outras pessoas:!:

Depois postarei o codigo já gravando o CD:!:

Fiquem com DEUS:!:

Aqui tem uma classe fácil para você redirecionar o fluxo do processo para um Stream qualquer:

E aqui tem uma classe que criar um stream para um JTextArea ou JTextPane:

Vinicius obrigado pela dica mas com o codigo que eu postei já está bom…

Será um comando bem básico: o cliente vai clicar no botão e vai ser executado um comando para gravar o CD, não vai precisar de retornos e talz… vai precisar apenas se der erro…

Mas mesmo assim obrigado pela dica(poderá ser util outra vez)…

Fiquem com DEUS:!:

Olha eu de novo incomodando voces!:smiley:

Este codigo que postei ele consegue passar um parametro normalmente porém no meu sistema eu preciso passar mais de um parametro em um comando só!

quando eu tento passá-los dá erro!

Retorna uma mensagem como se não tivesse passado parametro nenhum, ou que não está reconhecendo o parametro…

Alguem tem uma luz aii??

Obrigado pela atenção:!:

Fiquem com DEUS:!:

Se o comando tiver N argumentos, você precisa passar cada um deles separadamente.
Por exemplo, se seu comando original era algo como “nerocmd --erase --drivename d:”, você precisa fazer algo como:

            String cmds[] = new String[]{"C:/program files/nero/nero 11/nero burning rom/nerocmd.exe", "--erase", "--drivename", "d:"}; 

OK?

Galerinha!!

Muito obrigado pelas dicas de todos!!!

Eu até tentei fazer pelos codigos ditos acima!!

Mas terminei fazendo com um comando bem simples:

       public void Continuar_MultiSessao(String[] Arquivos, String Drive) {
            String comando = "C:/program files/nero/nero 11/nero burning rom/nerocmd.exe --write --drivename " + Drive + " --real --iso CDPaciente1 --import --close_session ";
            for (int i = 0; i < Arquivos.length; i++) {
                if (!"".equals(Arquivos[i])) {
                    comando += Arquivos[i] + " ";
                }
            }
            try {
                Process p;
                p = Runtime.getRuntime().exec(comando);
                InputStream input = p.getInputStream();
                BufferedInputStream reader = new BufferedInputStream(input);
                Scanner sc = new Scanner(input);
                System.out.println("Gravação em andamento, Aguarde...");
                while (sc.hasNext()) {                    
                    String linha = sc.nextLine();                    
                    System.out.println(linha);
                }
                System.out.println("Gravação Concluida com Sucesso!");
            } catch (IOException ex) {
                Logger.getLogger(TreeVideos.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

Espero que possa ajudar a mais alguem:!:

Aqui está rodando beleza:!:

E se este codigo estiver errado(ou algo do tipo) por favor avisem-me:!:

Fiquem com DEUS e Obrigado pela atenção:!:

Obs: O codigo acima está continuando um CD multisessão para criar um novo CD(multi sessão) retire o “–import”

Fiquem com DEUS:!:

Olá !!!

Cara Parabéns pelo seu Post, muito bem explicado e completo !! Precisamos mais de colaboradores como você, que dê uma explicação clara de todo procedimento.

Abraço,

Fabio Santos.