Ajuda Fazer backup base de dados para o usuario salvar num pendrive

Galera é o seguinte , preciso fazer um backup da base de dados do meu sistema para que o usuario administrador possa salvar este arquivo num pendrive ou outro meio
pois bem meu banco se encontra dentro do meu projeto e queria que ele o arquivo q ele gerasse fosse salvo la tbem e se o backup fosse gerado correto o jchooser abrisse direto da pasta do projeto apenas pra ele escolher o arquivo .GBK e poder salvar no backup.meu codigo esta abaixo:

if (e.getSource() == barras.jmiBackup) {
int opcao;
Object[] botoes = {“Sim”, “Não”};
opcao = JOptionPane.showOptionDialog(null, “Deseja fazer backup da base de dados?”, “BACKUP”, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, botoes, botoes[0]);

        if (opcao == JOptionPane.YES_OPTION) {
            try {
             Scanner s = new Scanner(Runtime.getRuntime().exec("C:\\Firebird_2_1\\bin\\gbak.exe -user SYSDBA -pas masterkey C:\\Banco\\BANCOFINAL.FDB "+System.getProperty("user.dir") +"\\Banco\\VITALIZE.GBK").getInputStream());

            } catch (IOException ex) {
                Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
            }
             JFileChooser salvarBackup = new JFileChooser();
             salvarBackup.setDialogTitle("Salvar Backup");
             int horadesalvar = salvarBackup.showSaveDialog(this);
             if(horadesalvar == JFileChooser.APPROVE_OPTION){
                 File arq = salvarBackup.getSelectedFile();
                 String DiretorioEscolhido = salvarBackup.getSelectedFile().getAbsolutePath();
               
                  try {
                   //      Scanner scannerBanco = new Scanner(Runtime.getRuntime().exec(""+ System.getProperty("user.dir") + "\\ExecutavelBackup\\bin\\gbak.exe -user SYSDBA -pas masterkey  "+ System.getProperty("user.dir") + "\\Banco\\BANCOFINAL.FDB D:\\BANCOVITALIZE.GBK").getInputStream());
                       escreveArquivo(arq.getPath());
                  } catch (IOException ex) {
                    Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
                  }
                System.out.println("Nome do arquivo escolhido: " + arq.getPath());
             }
        }
    }

Entendi o que você quer mas não entendi a sua duvida, explica melhor por favor.

Agora um detalhe: Eu vi que está usando o banco de dados firebird, pelo que eu me lembro, você pode copiar o diretório inteiro que já irá fazer backup do banco, não precisa rodar o gbak.exe, certo? Se isso funcionar, simplesmente copie o conteudo inteiro (arquivos fisicos) para o pen-drive e vice-versa.

Oii Jair obrigado por responder meu tópico!!!
Pois bem eu tenho um conhecimento não muito avançado no java, é que eu tenho q entregar meu Sistema para meu TCC, e no meu plano eu falava que o usuario podia salvar a base de dados ,num pendrive
ou outra media, só que em uma pesquisa,consegui gerar o arquivo.gbk,só que ae eu determino um lugar fixo para a geracao do arquivo no caso D:, mas eu nao to conseguindo que o usuario administrador,consiga gerar este arquivo no proprio
diretorio do projeto na pasta \Banco e que ele consiga abrir atravez do jchooser o diretorio da pasta banco e copiar este arquivo para o pendrive.
Esta ideia que vc me falou teria como fazer pela propria aplicacao, tipo ele abre o menu Backup e ele chamar o Jchooser abrindo o diretorio do banco e em seguinda ele salvar no pendrive, se possivel me de uma luz de como fazer!!!
Como eu to fazendo para gerar o arquivo: Scanner s = new Scanner(Runtime.getRuntime().exec(“C:\Firebird_2_1\bin\gbak.exe -user SYSDBA -pas masterkey C:\BANCOFINAL.FDB D:\BANCOVITALIZE.GBK”).getInputStream());
Tentei fazer assim: Scanner scannerBanco = new Scanner(Runtime.getRuntime().exec(""+ System.getProperty(“user.dir”) + "\ExecutavelBackup\bin\gbak.exe -user SYSDBA -pas masterkey "+ System.getProperty(“user.dir”) + “\Banco\BANCOFINAL.FDB + System.getProperty(“user.dir”) +\BANCOVITALIZE.GBK”).getInputStream()); só que nao deu.

vou te mandar oq eu fiz ate agora para vc poder dar uma analisada e ver onde to errando.
if (e.getSource() == barras.jmiBackup) {
int opcao;
Object[] botoes = {“Sim”, “Não”};
opcao = JOptionPane.showOptionDialog(null, “Deseja fazer backup da base de dados?”, “BACKUP”, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, botoes, botoes[0]);

        if (opcao == JOptionPane.YES_OPTION) {
            try {
             Scanner s = new Scanner(Runtime.getRuntime().exec("C:\\Firebird_2_1\\bin\\gbak.exe -user SYSDBA -pas masterkey  C:\\BANCOFINAL.FDB D:\\BANCOVITALIZE.GBK").getInputStream());


            } catch (IOException ex) {
                Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
            }
             JFileChooser salvarBackup = new JFileChooser();
             salvarBackup.setDialogTitle("Salvar Backup");
             File diretorioInicial = new File(""+System.getProperty("user.dir")+"\\Banco");
             salvarBackup.setCurrentDirectory(diretorioInicial);
                             
             int horadesalvar = salvarBackup.showSaveDialog(this);
             if(horadesalvar == JFileChooser.APPROVE_OPTION){
                 File arq = salvarBackup.getSelectedFile();
                 String DiretorioEscolhido = salvarBackup.getSelectedFile().getAbsolutePath();
       
                  try {
                   //      Scanner scannerBanco = new Scanner(Runtime.getRuntime().exec(""+ System.getProperty("user.dir") + "\\ExecutavelBackup\\bin\\gbak.exe -user SYSDBA -pas masterkey  "+ System.getProperty("user.dir") + "\\Banco\\BANCOFINAL.FDB D:\\BANCOVITALIZE.GBK").getInputStream());
                      [b] escreveArquivo(arq.getPath());[/b]
                  } catch (IOException ex) {
                    Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
                  }
                System.out.println("Nome do arquivo escolhido: " + arq.getPath());
             }
        }
    }

Metodo para salvar o arquivo no pen drive:
public void escreveArquivo(String fileName) throws IOException{

   PrintWriter arquivoSalvo = new PrintWriter(new FileWriter(fileName));
   arquivoSalvo.close();
   JOptionPane.showMessageDialog(null, "Arquivo salvo com sucesso!");

}

Agradeço desde já sua ajuda!

[quote=Jair Rillo Junior]Entendi o que você quer mas não entendi a sua duvida, explica melhor por favor.

Agora um detalhe: Eu vi que está usando o banco de dados firebird, pelo que eu me lembro, você pode copiar o diretório inteiro que já irá fazer backup do banco, não precisa rodar o gbak.exe, certo? Se isso funcionar, simplesmente copie o conteudo inteiro (arquivos fisicos) para o pen-drive e vice-versa.[/quote]

Eu também uso o Firebird e penso em fazer algo semelhante (no servidor), em alguns clientes eles colocaram um serviço no servidor somente para executar esse backup, você não deve copiar o diretório inteiro para fazer o backup porque se tiver algum usuário com o banco de dados aberto ele pode ser corrompido e depois ficar com dados inválidos.