Base64.decode não funciona

10 respostas
juliocesarsrosa

e aew galera !! estou com um problema e gostaria da ajuda de vcs…
tenho uma variavel que recebe uma string… que depois é codificada em base 64 …

ou seja eu codifico em base 64 para depois testar a descodificação… em base64
a codificação funciona ele bagunça os caracteres… certinho… porem nao consigo descodificalos depois …
segue meu código

package com.eversystems.il.tester.jms;  
      
    import static com.eversystems.il.util.IntegLayerErrorCodes.ERROR_XML_IN;  
      
    import java.io.ByteArrayInputStream;  
    import java.io.ByteArrayOutputStream;  
    import java.io.File;  
    import java.io.FileWriter;  
    import java.io.IOException;  
    import java.util.Date;  
      
    import com.eversystems.il.handle.core.HandleException;  
    import com.eversystems.il.main.IntegLayerException;  
    import com.eversystems.il.util.DateUtil;  
    import com.eversystems.il.util.StringUtil;  
    import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;  
    import com.sun.org.apache.xml.internal.security.utils.Base64;  
      
      
    public class FT01Teste {  
      
        public static void main(String[] args) throws IOException, IntegLayerException, Base64DecodingException  {  
            FT01Teste ft01Teste = new FT01Teste();  
            String codigoProduto = "DC";  
            String source;  
              
            if (codigoProduto.equals("DC")) {  
      
                source = "c:\";  
      
                buildFile(source);  
      
            }  
        }  
      
        private static void buildFile(String source)throws HandleException, IOException, Base64DecodingException {  
                FT01Teste ft01Teste = new FT01Teste();  
            String value = "Testando conteudo do arquivo Texto...";  
          
            value = Base64.encode(value.getBytes());    
              
            File file = new File(source+ft01Teste.buildFileName(ft01Teste));  
              
            file.createNewFile();  
            FileWriter fw = new FileWriter(file);  
            fw.write(decodeFile(value));  
            fw.close();  
              
            }  
      
      
        private String buildFileName(FT01Teste ft01Teste) throws HandleException{  
            String fileName = "";  
            String name = "julio";  
            String clientCode = "4563456";  
            String data = "";  
            String nome = "cesar.txt";  
            String codigo = "32131";  
              
            try {  
                name = StringUtil.truncString(nome, '.');  
                clientCode = codigo;  
                data = DateUtil.toString(new Date(), "ddMMyyyy");  
                  
                fileName = name+clientCode+"_"+data+".txt";  
            } catch (Exception e) {  
                throw new HandleException(ERROR_XML_IN, "Dados invalidos para formar o nome do arquivo: name:"+name+" clientCode:"+clientCode+"\n", e);  
            }  
              
              
            return fileName;  
        }  
          
          
          
          
        private static String decodeFile(String value) throws Base64DecodingException{// aki ele nao esta conseguindo decodificar...   
            byte[] decodeFile = Base64.decode(value.getBytes());  
            new ByteArrayInputStream(decodeFile);  
      
            return value;  
              
        }  
          
          
      
    }

algm sabe o que pode ser??

obrigado

10 Respostas

drsmachado
private static String decodeFile(String value) throws Base64DecodingException{// aki ele nao esta conseguindo decodificar...

Exception?
Não executa o que deveria?
Não roda?

juliocesarsrosa

Entao na verdade primeiramente la em cima eu dou um

value = Base64.encode(value.getBytes());

para codificar…
ai a string que esta em value fica toda bagunçada blz… certinho…

depois eu quero decodificar ai chamo esse método

private static String decodeFile(String value) throws Base64DecodingException{ 
        byte[] decodeFile = Base64.decode(value.getBytes());    
        new ByteArrayInputStream(decodeFile);    
    
        return value;    
            
    }

ele deveria decodificar o “value” mas na verdade passa por ele retorna normal continua e nao decodifica…
nao da erro nenhum mais tambem nao decodifica…

obrigado.

drsmachado

Claro, em que momento você atribui ao “value” um novo valor? Você apenas faz ele “passear” pelo método…

juliocesarsrosa

poutz sou noob ainda em java pode me ajudar me mostrar como ficaria essa parte???

obrigado amigão!

drsmachado

Meu caro, neste site http://www.coderanch.com/t/278987/Streams/java/convert-Bytearray-input-stream-String#1283137 existe uma solução. A resposta foi postada pelo Jim Yingst.
Basicamente, você precisará alterar o trecho

new ByteArrayInputStream(decodeFile);

para

ByteArrayInputStream generatedInputStream = new ByteArrayInputStream(decodeFile);;

E ctrl + C e ctrl + V no trecho postado, retornando o str.

juliocesarsrosa

Ola amigao eu implementei do geito que vc falou mais ainda n esta funcionando da uma olhadinha por favor…
ele passa pelo metodo retorna mas nao descodifica… é como se aidna estivesse só passeando…
talvez eu tenha feito algo errado…

obrigado

package com.eversystems.il.tester.jms;

import static com.eversystems.il.util.IntegLayerErrorCodes.ERROR_XML_IN;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

import org.apache.commons.net.ftp.FTPClient;

import sun.net.ftp.FtpClient;

import com.eversystems.il.handle.core.HandleException;
import com.eversystems.il.main.IntegLayerException;
import com.eversystems.il.util.DateUtil;
import com.eversystems.il.util.StringUtil;
import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
import com.sun.org.apache.xml.internal.security.utils.Base64;


public class FT01Teste {

	public static void main(String[] args) throws IOException, IntegLayerException, Base64DecodingException  {
		FT01Teste ft01Teste = new FT01Teste();
		String codigoProduto = "DC";
		String source;
		
		if (codigoProduto.equals("DC")) {

			source = "c:\";

			buildFile(source);

		}
	}

	private static void buildFile(String source)throws HandleException, IOException, Base64DecodingException {
			FT01Teste ft01Teste = new FT01Teste();
		String value = "Testando conteudo do arquivo Texto...";
	
		value = Base64.encode(value.getBytes());  
		
		File file = new File(source+ft01Teste.buildFileName(ft01Teste));
		
		file.createNewFile();
		FileWriter fw = new FileWriter(file);
		decodeFile(value);//Passando separadamente agora.. 
		fw.write(value); //só grava agora depois que recebe do return do metodo de decodificação..
		fw.close();
		
		}


	private String buildFileName(FT01Teste ft01Teste) throws HandleException{
		String fileName = "";
		String name = "julio";
		String clientCode = "4563456";
		String data = "";
		String nome = "cesar.txt";
		String codigo = "32131";
		
		try {
			name = StringUtil.truncString(nome, '.');
			clientCode = codigo;
			data = DateUtil.toString(new Date(), "ddMMyyyy");
			
			fileName = name+clientCode+"_"+data+".txt";
		} catch (Exception e) {
			throw new HandleException(ERROR_XML_IN, "Dados invalidos para formar o nome do arquivo: name:"+name+" clientCode:"+clientCode+"\n", e);
		}
		
		
		return fileName;
	}

	
	public static ByteArrayInputStream decodeFile(String value) throws Base64DecodingException{
		byte[] decodeFile = Base64.decode(value.getBytes());
	    ByteArrayInputStream generatedInputStream = new ByteArrayInputStream(decodeFile);  


	    return generatedInputStream; //retornando stream agora..
		
	}
	
	

}
drsmachado

E cade a parte do código que você deveria ter pego no link que passei? Chegou a ver ou não?

juliocesarsrosa

eu vi mais não compreendi muito bem … como disse sou meio noob ainda… poderia me dar um exemplo? grato

drsmachado

O código lá está pronto.
A grosso modo, apenas copiei a parte necessária do teu código (a codificação para base 64 e o início do decode) e uni ao trecho de código que lá está.
Não tem segredo.

juliocesarsrosa

vlww cara funcionou obrigadoo !!!

obrigado mesmo vlww

segue como ficouu

package com.eversystems.il.tester.jms;

import static com.eversystems.il.util.IntegLayerErrorCodes.ERROR_XML_IN;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

import org.apache.commons.net.ftp.FTPClient;

import sun.net.ftp.FtpClient;

import com.eversystems.il.handle.core.HandleException;
import com.eversystems.il.main.IntegLayerException;
import com.eversystems.il.util.DateUtil;
import com.eversystems.il.util.StringUtil;
import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
import com.sun.org.apache.xml.internal.security.utils.Base64;


public class FT01Teste {

	public static void main(String[] args) throws IOException, IntegLayerException, Base64DecodingException  {
		FT01Teste ft01Teste = new FT01Teste();
		String codigoProduto = "DC";
		String source;
		
		if (codigoProduto.equals("DC")) {

			source = "c:\";

			buildFile(source);

		}
	}

	private static void buildFile(String source)throws HandleException, IOException, Base64DecodingException {
			FT01Teste ft01Teste = new FT01Teste();
		String value = "Testando conteudo do arquivo Texto...";
	
		value = Base64.encode(value.getBytes());  
		
		
		
		File file = new File(source+ft01Teste.buildFileName(ft01Teste));
		
		file.createNewFile();
		FileWriter fw = new FileWriter(file);
		fw.write(decodeFile(value));
		fw.close();
		
		}


	private String buildFileName(FT01Teste ft01Teste) throws HandleException{
		String fileName = "";
		String name = "julio";
		String clientCode = "4563456";
		String data = "";
		String nome = "cesar.txt";
		String codigo = "32131";
		
		try {
			name = StringUtil.truncString(nome, '.');
			clientCode = codigo;
			data = DateUtil.toString(new Date(), "ddMMyyyy");
			
			fileName = name+clientCode+"_"+data+".txt";
		} catch (Exception e) {
			throw new HandleException(ERROR_XML_IN, "Dados invalidos para formar o nome do arquivo: name:"+name+" clientCode:"+clientCode+"\n", e);
		}
		
		
		return fileName;
	}
	
	
	
	
	  private static String decodeFile(String value) throws Base64DecodingException{// aki ele nao estava conseguindo decodificar...       
	        byte[] decodeFile = Base64.decode(value.getBytes());      
	        return new String(decodeFile);      
	    }      
	}
Criado 2 de junho de 2011
Ultima resposta 3 de jun. de 2011
Respostas 10
Participantes 2