Ler conteúdo de arquivo recebido através do FileUpload no PrimeFaces

Olá, eu estou recebendo um arquivo de texto através do FileUpload no PrimeFaces e gostaria de saber como faço para pegar o conteúdo desse arquivo, ou seja, como faço para pegar o texto que o usuário enviou e adicioná-lo à uma String. Se alguém puder me ajudar, agradeço.

Olá,

Recentemente fiz uma aplicação para ler o conteúdo de arquivos XML, mas o processo é semelhante para ler arquivos TXT, então vou recortar algumas partes aqui para que você possa ter uma ideia como faz. Estou abreviando algumas coisas aqui, pois estou entendendo que você já conhece a classe FileUpload do Primefaces.

public void upload(FileUploadEvent event) {
		UploadFile file = event.getFile();
		
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		//Atenção para essa classe, tem que ser a do pacote: org.w3c.dom.Document
                    Document doc = builder.parse(file.getInputstream());
			
                    //Pronto o conteudo do TXT esta, veja o que você precisa nos metodos do objeto doc 
                    
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		
	}

Olá, apareceu o seguinte erro:
Grave: [Fatal Error] :1:1: O conteúdo não é permitido no prólogo.

Não entendi o seguinte comentário que você fez:

//Atenção para essa classe, tem que ser a do pacote: org.w3c.dom.Document

Olá programadorars,

Desculpa, realmente minha sugestão de solução anterior não vai funcionar, pois estou trabalhando em um sistema que lê arquivo XML, mas para o que você precisa a solução é muito mais simples que lê arquivos XML de Nota fiscal eletrônica.

Segue então solução que já testei e garanto que vai funcionar agora:

Codigo da view:

<h:form enctype="multpart/form-data">
		<p:fileUpload label="Carregar" value="#{lendoTxtBean.file}" mode="advanced"
			fileUploadListener="#{lendoTxtBean.upload}" auto="true" ></p:fileUpload>

	</h:form>

Código do ManagedBean

@ManagedBean
public class LendoTxtBean {

	private UploadedFile file;
	
	public void upload(FileUploadEvent event) throws IOException{
		this.file = event.getFile();
		
		 String conteudoDoArquivo = new Scanner(file.getInputstream(),"UTF-8").useDelimiter("\\A").next();
		
		System.out.println(conteudoDoArquivo);
		
	}
	
}

Por favor confirma o bom funcionamento da solução, ok? Valeu!

1 curtida

Nossa, deu super certo aqui. Muito obrigada!
Você poderia me explicar o motivo do “\A” no useDelimiter?
No caso, funcionou com arquivo txt, você sabe como eu posso fazer pra pegar outros tipos? Ex.: *.doc

1 curtida

Olá,

O sentido do “\A” é:
\A The beginning of the input

Fonte: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

E sobre se é possível fazer a leitura de arquivos .doc é possivel sim, porém nós usaríamos outra biblioteca:

https://poi.apache.org/

Em um outro projeto já usei essa biblioteca para lê e escrever em arquivos em Excel, mas em doc nunca usei.