Problemas com (String) no método replace

3 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?

3 Respostas

Gerson_da_S_Lima

Tu já tentou sem fazer o replace e no final onde tu coloca uma \ e o nome do arquivo colocar uma / e o nome do arquivo, pois no windows usa-se C:/… e no linux usa-se a .

C

Gerson eu retirei ai o replace e a string que passei ao métondo inserir_foto foi C:\Users\Cleyton\Pictures/teste.jpg e assim também continua não dando certo…
obrigado…

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 3
Participantes 2