Convertendo Byte para String, para que arquivo vindo de upload passe por validações
3 respostas
H
higor1810
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{BufferedReaderbr=newBufferedReader(newFileReader(arquivo));Stringlinha=null;//Percorre linha a linha do arquivowhile((linha=arquivo.readLine())!=null){//Separa os dados da linha por virgula e transforma em colunaString[]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.
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
higor1810
Explicando melhor, segue um exemplo do código, essa variável eu passo por método
Classe de onde vem a variável arquivo
privatestaticfinallongserialVersionUID=1L;StringnomeArquivo=null;byte[]arquivo=null;List<Client>listDealear=newArrayList<>();StringconteudoArquivo;List<LogUpload>listLogUplod;LogUploadlogUpload=newLogUpload();publicvoidconsultar(){listLogUplod=logUploadService.consultarPorNomeData(logUpload);}publicvoidhandleFileUpload(FileUploadEventevent){try{conteudoArquivo=event.getFile().getContentType();arquivo=event.getFile().getContents();nomeArquivo=event.getFile().getFileName();// nomeArquivo = nomeArquivo.substring(nomeArquivo.lastIndexOf("\\"), nomeArquivo.lastIndexOf("."));nomeArquivo+=newSimpleDateFormat("ddMMyyyy-hhmmss").format(newDate())+".csv";Stringcaminho="C:\\Teste\\"+nomeArquivo;FileOutputStreamfos=newFileOutputStream(caminho);fos.write(arquivo);fos.close();FacesMessagemsg=newFacesMessage("Upload do arquivo",nomeArquivo+" executado com sucesso.");FacesContext.getCurrentInstance().addMessage(null,msg);}catch(Exceptione){e.printStackTrace();}}publicvoidsalvar(){try{}catch(Exceptione){e.printStackTrace();}}
Classe onde preciso realizar as validações do arquivo
publicclassPrincipal{List<ArquivoCSV>listaArquivoCSV=newArrayList<>();publicstaticvoidmain(Stringargs[]){//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")privateStringgetDateTime(){DateFormatdateFormat=newSimpleDateFormat("yyyy-mm-dd");Datedate=newDate();returndateFormat.format(date);}//Metodo responsável por fazer a leitura e tratar o arquivopublicvoidexecutaTratamento(bytearquivo){//variaveis da classe (retirei por ser de conteúdo privado)try{BufferedReaderbr=newBufferedReader(newFileReader(arquivo));Stringlinha=null;//Percorre linha a linha do arquivowhile((linha=br.readLine())!=null{//Separa os dados da linha por virgula e transforma em colunaString[]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...
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)