Convertendo Byte para String, para que arquivo vindo de upload passe por validações

3 respostas
H

Boa tarde galera,

Pesquisei mais não encontrei um maneira sucinta de realizar a operação alguém pode me ajudar?

Bom preciso converter a variável de byte para String para que posso realizar algumas validações no arquivo recebido

try {
			 BufferedReader br = new BufferedReader(new FileReader(arquivo));
					    						
			String linha = null;
			
			//Percorre linha a linha do arquivo
			while((linha = arquivo.readLine()) != null){
				//Separa os dados da linha por virgula e transforma em coluna
				String[] colunas = linha.split(",");

A variável arquivo é do tipo byte, para utilizar o readLine eu preciso converter ela para String, mais não sei como fazer isso neste caso.

3 Respostas

thiago_dias

A variável arquivo é do tipo byte? Como você passa um byte no construtor do FileReader?
Não entendi muito bem essa parte, mas vamos lá.

No seu código observei que você está tentando ler o arquivo de forma errada…

while((linha = arquivo.readLine()) != null){

O objeto BufferedReader é quem vai ler o seu arquivo, portanto você deve invocar o readLine() a partir do br…

while((linha = br.readLine()) != null){

flw

H

Explicando melhor, segue um exemplo do código, essa variável eu passo por método

Classe de onde vem a variável arquivo

private static final long serialVersionUID = 1L;
	String nomeArquivo = null;
	byte[] arquivo = null;
	List<Client> listDealear = new ArrayList<>();
	String conteudoArquivo;
	List<LogUpload> listLogUplod;
	LogUpload logUpload = new LogUpload();
	
	public void consultar(){
		listLogUplod = logUploadService.consultarPorNomeData(logUpload);
	}
	
	public void handleFileUpload(FileUploadEvent event) {
		try {
				conteudoArquivo = event.getFile().getContentType();
				arquivo = event.getFile().getContents();
				nomeArquivo = event.getFile().getFileName();
//				nomeArquivo = nomeArquivo.substring(nomeArquivo.lastIndexOf("\\"), nomeArquivo.lastIndexOf("."));
				nomeArquivo +=new SimpleDateFormat("ddMMyyyy-hhmmss").format(new Date()) + ".csv";
				String caminho = "C:\\Teste\\"+nomeArquivo;
				FileOutputStream fos = new FileOutputStream(caminho);
				fos.write(arquivo);
				fos.close();
				FacesMessage msg = new FacesMessage("Upload do arquivo", nomeArquivo + " executado com sucesso.");
				FacesContext.getCurrentInstance().addMessage(null, msg);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void salvar(){
		try {
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

Classe onde preciso realizar as validações do arquivo

public class Principal {
	
	List<ArquivoCSV> listaArquivoCSV = new ArrayList<>();
	
	public static void main(String args[]){
		//chama o metodo que lê o arquivo e faz o tratamento
		//new Principal().executaTratamento();
	}
	
	// aqui será meu metodo onde eu irei pegar a data que quero compara, no caso vou pegar uma data
	//a cadastrada no bd, isso aqui é apenas para teste
    @SuppressWarnings("unused")
	private String getDateTime() {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");
        Date date = new Date();
        return dateFormat.format(date);
    }

	
	
	//Metodo responsável por fazer a leitura e tratar o arquivo
	public void executaTratamento(byte arquivo){
	            
//variaveis da classe (retirei por ser de conteúdo privado)

		
		 try {
			
			
			 BufferedReader br = new BufferedReader(new FileReader(arquivo));
			
			String linha = null;
			
			//Percorre linha a linha do arquivo
			while((linha = br.readLine()) != null{
				//Separa os dados da linha por virgula e transforma em coluna
				String[] colunas = linha.split(",");
gmcouto

de qualquer forma, para transformar um byte em uma string, basta colocar o byte num array de bytes, e jogar no construtor de uma string.

byte umUnicoByte;
...
byte[] byteArray = new byte[]{umUnicoByte};
String arquivoStr = new String(byteArray);

Ainda assim eu acho que teu código está errado:
- Pois o "arquivo" no primeiro trecho do código é byte[]... logo vou assumir que executaTratamento(byte arquivo) esteja com o tipo errado no parâmetro.... (isso é um achismo meu devido a semantica das suas variáveis)
- Pelo que eu entendi a variável arquivo é o conteúdo de um arquivo que você quer ler, e não o nome do arquivo. Se ele for o conteúdo, tu não vai usar o FileReader... e sim um StringReader...

alterando menos possível teu código, fica assim:
public void executaTratamento(byte[] arquivo){
		 try {
			 BufferedReader br = new BufferedReader(new StringReader(new String(arquivo)));
			
			String linha = null;
			while((linha = br.readLine()) != null{
				String[] colunas = linha.split(",");
Mas eu mudaria muita coisa para facilitar a manutenção e melhorar a compreensão seu código. (campos de tipos mais coerentes, nomes de variáveis auto-explicativas)
Criado 19 de outubro de 2012
Ultima resposta 19 de out. de 2012
Respostas 3
Participantes 3