Olá, estou desenvolvendo um método que pesquisa por expressões regulares dentro de um arquivo, mas encontrei problemas com arquivos de formatos diferentes do TXT. Modificando um pouco meu método inicial, consegui fazer ele pesquisar em arquivos DOC, porém no “braço”, não consegui pegar só o texto dele (o que tornar meio lento o processo com arquivos grandes), gostaria de saber se existem classes ou bibliotecas que eu não conheça. O código segue abaixo.
/**
* Lê arquivos utilizando a classe Scanner. Só funciona para arquivos TXT
*/
private ArrayList pesquisarPalavraScanner(String nomeDoArquivo, String regex) throws Exception {
ArrayList a = new ArrayList();
// abrindo o arquivo para leitura
File arquivo = new File(nomeDoArquivo);
Scanner lendoArquivo = new Scanner(arquivo);
// leia o arquivo linha por linha até chegar ao seu fim
Pattern p = Pattern.compile(" " + regex + " ", Pattern.CASE_INSENSITIVE);
while (lendoArquivo.hasNextLine()) {
String linha = lendoArquivo.nextLine();
String[] palavras = linha.split(" "); // Para pesquisar em diferentes palavras separadamente
for (int i = 0; i < palavras.length; i++) {
if (p.matcher(" " + palavras[i] + " ").find()) {
a.add(palavras[i]);
}
}
}
// fechando o scanner
lendoArquivo.close();
return a;
}
/** Esse funciona para DOC também
*/
private ArrayList pesquisarPalavraTeste(String nomeDoArquivo, String regex) throws Exception {
ArrayList a = new ArrayList();
// abrindo o arquivo para leitura
File arquivo = new File(nomeDoArquivo);
Pattern p = Pattern.compile(" " + regex + " ", Pattern.CASE_INSENSITIVE);
FileReader fr = new FileReader(arquivo);
BufferedReader br = new BufferedReader(fr);
while (br.ready()) {
String linha = br.readLine();
String[] palavras = linha.split(" ");
for (int i = 0; i < palavras.length; i++) {
Matcher m = p.matcher(" " + palavras[i] + " ");
if (m.find()) {
a.add(palavras[i].toLowerCase());
}
}
}
return a;
}
Valeu!