Convertendo String para byte[]

7 respostas
vinicius_roc

Pessoal estou com uma dificuldade para tentar fazer o seguinte:

Irei chamar um webservice e ele vai me retornar uma string onde o conteudo dela é um array de bytes que representa um arquivo. Porem esse array vem escrito em forma de straing e quando tento passar para bytes e gerar o arquivo, ele faz bem, mas na hora de abri-lo o conteudo eh o proprio array em forma de string. =/

Como posso fazer essa conversão?

Muito obrigado

7 Respostas

ViniGodoy

Você não deve usar a classe String para representar coisas diferentes de Strings. Ou seja, a menos que seu arquivo seja um texto, não use String, trabalhe com bytes diretamente.

Você pode colocar o código de onde vc lê esse array e de onde você grava esse array?

vinicius_roc

Mas tem como vim do webservice ja com o tipo byte[]?

fredferrao

getBytes() não funciona?

String umaString = "Eu sou uma String";

byte[] umByteArray = umaString.getBytes();
vinicius_roc

Funciona funciona, mas tipo na string ja esta escrita um Array de bytes, entao quando eu pego ela em bytes e depois mando p o arquivo, ele transforma na string com os bytes novamente, em vez do arquivo

ViniGodoy

Ainda está tudo muito abstrato. Não sabemos o conteúdo da String, nem como vc está recebendo e nem como está gravando. Ao invés de nos forçar a adivinhar, tem como postar essas informações para nós?

vinicius_roc

tem sim

pega o array que o webservice retornou

byte[] informe = null;
		
		InformeRendimentoGetResponseDocument responseDocument = InformeRendimentoGetResponseDocument.Factory.newInstance();
		
		InformeRendimentoGetRequestDocument requestDocument = InformeRendimentoGetRequestDocument.Factory.newInstance();
		CtInformeRendimentoGetIn pesquisa = requestDocument.addNewInformeRendimentoGetRequest();
		
		CtPesquisaData data = pesquisa.addNewDtData();
		Intervalo periodo = data.addNewIntervalo();
		periodo.setInicio(inicio);
		periodo.setFim(fim);
		
		pesquisa.setIdPrestador(BigInteger.valueOf(id));
		
		try{
			
			//Chama o WebService
			WebService service = WebServiceProvider.getInstance().getServer("Easy_Informe_Rendimento");
			WebServiceClient client = new WebServiceClient(service);
			String resposta = client.callWebService(requestDocument.toString());
			
			responseDocument = InformeRendimentoGetResponseDocument.Factory.parse(resposta);
			
			//Se contiver erro imprime no log
			if( responseDocument.getInformeRendimentoGetResponse().getErro() !=null){
				
				CtErro erro = responseDocument.getInformeRendimentoGetResponse().getErro();
				log.error("Codigo erro: " + erro.getCdOcorrencia());
				log.error("Descrição erro: " + erro.getTxOcorrencia());
				
				throw new ServiceException("Erro retornado do WebService");	
				
			}else {
				
				informe = responseDocument.getInformeRendimentoGetResponse().getInformeRendimento().getBytes();
				
			}
			
		} catch (XmlException e) {
			log.error(e.getMessage(), e);
			throw new ServiceException(e);
		}
		
		return informe;
Monta o arquivo
DownloadFile.downloadFile("InformeRendimento.xls", bytesArquivo);
public static void downloadFile(String fileName, byte[] bytes) throws Throwable{
		
		HttpServletResponse response = ServletActionContext.getResponse();
		fileName = fileName.replaceAll(" ","");
		if(fileName.substring(fileName.length()-3).equals(ContentType.PDF.name().toLowerCase())) {
			 response.setContentType(ContentType.PDF.getContentType());
			 response.setHeader("Content-Disposition", "attachment; filename="+fileName);
	    } else if(fileName.substring(fileName.length()-3).equals(ContentType.XML.name().toLowerCase())) {
	        response.setContentType(ContentType.XML.getContentType());
	        response.setHeader("content-disposition", "attachment; filename="+fileName);
	    } else if(fileName.substring(fileName.length()-3).equals(ContentType.ZIP.name().toLowerCase())) {
	        response.setContentType(ContentType.ZIP.getContentType());
	        response.setHeader("content-disposition", "attachment; filename="+fileName);
	    } else if(fileName.substring(fileName.length()-3).equals(ContentType.XLS.name().toLowerCase())) {
	        response.setContentType(ContentType.XLS.getContentType());
	        response.setHeader("content-disposition", "attachment; filename="+fileName);
	    } else {
	        response.setContentType(ContentType.TXT.getContentType());
	        response.setHeader("content-disposition", "attachment; filename="+fileName);
	    }
		
		response.setContentLength(bytes.length); 
		response.setBufferSize(bytes.length);
		 
		OutputStream out = response.getOutputStream();
        out.write(bytes);
        out.flush();
        response.flushBuffer();
        out.close();
	}
fredferrao

…[edited]

mals não percebi onde tu disse que os bytes que chegam representam um arquivo.

Criado 7 de janeiro de 2010
Ultima resposta 8 de jan. de 2010
Respostas 7
Participantes 3