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!
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
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:
Em um outro projeto já usei essa biblioteca para lê e escrever em arquivos em Excel, mas em doc nunca usei.