Erro com String no método replace

7 respostas
C

Desenvolvo um sistema para locadora e no cadastro de clientes tenho um botão que desejo utilizar para a inserção de fotos, que serão buscadas no sistema (windows), que possui o seguinte código.

private void fotojButtonActionPerformed(java.awt.event.ActionEvent evt) { 
   String foto = ""; 
   final JFileChooser fc = new JFileChooser(); 
   int returnVal = fc.showOpenDialog(teste = new javax.swing.JFrame()); 
   arquivo_foto = fc.getSelectedFile(); 
   nome_arquivo_foto = arquivo_foto.getName(); 
   nome_arquivo_foto = " "+fc.getCurrentDirectory()+"\\"+nome_arquivo_foto+" "; 
   String sqlinserir = "Update Clientes set foto = ? Where idClientes = ?"; 
   if (nome_arquivo_foto.contains("\\")) 
   foto = nome_arquivo_foto.replace('\\' ,'/'); 
   //foto = "C:/Users/Cleyton/Pictures/teste.jpg"; 
   try 
  { 
      con_clientes.inserir_foto(sqlinserir, foto, codigojTextField.getText()); 
      JOptionPane.showMessageDialog(null, "Foto inserida com sucesso!"); 
      } catch (FileNotFoundException ex) { 
      Logger.getLogger(Clientes.class.getName()).log(Level.SEVERE, null, ex); 
  } 

}

con_clientes.inserir_foto(sqlinserir, foto, codigojTextField.getText()); É um metodo que criei dentro da minha classe de Conexão com o Mysql.
onde possui três argumentos que são: primeio o sql a ser alterado, segundo o caminho da foto e terceiro a Id do cliente.
As minhas variaveis string arquivo_foto e nome_arquivo_foto são variáveis globais dentro da classe cadastro de clientes...
Aqui segue o meu método inserir dentro da minha classe de conexão...

public void inserir_foto(String sqlupdate, String arquivo_foto, String id) throws FileNotFoundException 
{ 
   try 
  { 
      JOptionPane.showMessageDialog(null,arquivo_foto); 
      System.out.println(arquivo_foto); 
      int ind; 
      ind = Integer.parseInt(id); 
      ps = conexao.prepareStatement(sqlupdate); 
      File image = new File(arquivo_foto); 
      FileInputStream fis = new FileInputStream(image); 
      ps.setInt(2, ind); 
      ps.setBinaryStream(1,fis,(int)image.length()); 
      ps.executeUpdate(); 
  } 
  catch(SQLException erro) 
  { 
      JOptionPane.showMessageDialog(null,"Não foi possivel iserir a foto o erro foi: " + erro + "\nO sql passado foi: " + sqlupdate); 
  } 
}

O meu grande problema é que quando eu utilizo o metodo replace ou replaceAll para substituir o C:\Users\Cleyton\Pictures\imagem_mysql.jpg para
C:/Users/Cleyton/Pictures/imagem_mysql.jpg acontece o inusitado.
Aparentemente o replace funciona pois utilizo o metodo JOptionPane.showMessageDialog(null,arquivo_foto);, para visualizar a string alterada e nesse metodo ele consta como alterada mas quando o metodo inserir_foto pega essa string e cria o arquivo File da um erro...
E o retorno desse erro e que o caminho da imagem antes de ser alterada como se o replace nao tivesse funcionado...
Se eu descomentar a linha //nome_arquivo_foto = "C:/Users/Cleyton/Pictures/teste.jpg"; o força a regravação na string o meu método inserir_foto fuinciona
corretamente... Porém não é o interessante porque ai não justifica utilizar o JFileChooser para buscar a foto no sistema, e ficaria inserindo só uma imagem...

Detalhes do erro C:/Users/Cleyton/Pictures/teste.jpg //Aqui é a impressão da string arquivo_foto dentro do método inserir na linha 06 30/03/2009 08:58:00 locadora.Clientes fotojButtonActionPerformed SEVERE: null java.io.FileNotFoundException: C:\Users\Cleyton\Pictures\teste.jpg (A sintaxe do nome do arquivo, pasta ou nome do volume está incorreta) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(FileInputStream.java:106) at locadora.Conexao.inserir_foto(Conexao.java:8 at locadora.Clientes.fotojButtonActionPerformed(Clientes.java:1012) at locadora.Clientes.access$1200(Clientes.java:24) at locadora.Clientes$13.actionPerformed(Clientes.java:520) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:231 at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6216) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5981) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4583) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4413) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4413) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) CONSTRUÍDO COM SUCESSO (tempo total: 1 minuto 21 segundos)

Alguém poderia me ajudar?

7 Respostas

Marky.Vasconcelos

1° poste o código entre as tags [ code ] e [ / code ](Sem espaços) para facilitar a leitura.

Depois nós vemos.

F

Primeiro: Bem-vindo ao GUJ.

Segundo: Leia este tópico: http://www.guj.com.br/posts/list/50115.java
Terceiro: Como cita no link acima, procuro colocar o seu código dentro das tags code facilita a legibilidade e leitura do seu código, bem como um entendimento mais fácil por parte de quem está lendo. Logo, sua dúvida tem mais chances de ser esclarecida.

Quarto: Você já tentou fazer um debug do seu código? Pode ser a solução do teu problema…

:thumbup:

C

Obrigado pelas dicas Mark_Ameba and fernandoeick!!!
Quanto a depuração eu ja fiz sim, mas o problema continua…

Gerson_da_S_Lima

Tu já tentou fazer sem o replace e no final onde tu coloca uma \ colocar uma /.
No windows o padrão é: …/dir/dir… no linux é …\dir\dir…

C

Obrigado Gerson!!!
Não porque o método getCurrentDirectory do JFileChooser me retorna a pasta onde se encontra o arquivo da seguinte forma
C:\Users\Cleyton\Pictures

A unica forma que eu consegui inserir no Banco de Dados foi descomentando a linha 11 do método
private void fotojButtonActionPerformed(java.awt.event.ActionEvent evt. Porém fazendo isso eu sempre vou inserir a mensma foto
e não terei com procurar outra foto, como por exemplo em outra unidade ou pendriver, etc…

C

Cleyton008Obrigado Gerson!!!
Não porque o método getCurrentDirectory do JFileChooser me retorna a pasta onde se encontra o arquivo da seguinte forma
C:\Users\Cleyton\Pictures

A unica forma que eu consegui inserir no Banco de Dados foi descomentando a linha 11 do método
private void fotojButtonActionPerformed(java.awt.event.ActionEvent evt. Porém fazendo isso eu sempre vou inserir a mensma foto
e não terei com procurar outra foto, como por exemplo em outra unidade ou pendriver, etc…
Então o problema continua pessoal!

C

[color=darkblue]Obriado a todos pelas contribuições!!!
Com este erro já batalhava a algum tempo e descobri algo novo que não sabia…
pois para funcionar tive que corrigir um erro do método (String).replace.
Esse método após a alteração ele adiciona no início da strinca na posição string[0] um caracter vazio ou em branco…
então para corrigir esse erro é nescessário utilizar o seguinte código ou algum semelhante.[/color]

if (nome_arquivo_foto.contains("\\")) foto = nome_arquivo_foto.replace('\\' ,'/'); foto = nome_arquivo_foto.substring(1, nome_arquivo_foto.length());

Criado 30 de março de 2009
Ultima resposta 30 de mar. de 2009
Respostas 7
Participantes 4