Regexp para encontrar arquivo

2 respostas
B

Boa tarde,

tenho um formulário html com 2 campos: cpf e data (formato AA/MM).

Preciso encontrar um arquivo referente, sendo que o nome do arquivo é bem maior, contendo outras informações que não utilizamos para a busca.

formulario.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title></title>
</head>

<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<form method="post" action="busca.jsp">
<fieldset>
<label><b>CPF:</b> </label>
<input type="text" name="cpf" />
<span><b>Documento:</b></span>
<select name="ano">
<option value="09">2009</option>
</select>
<select name="mes">
<option value="01">Janeiro</option>
<option value="02">Fevereiro</option>
<option value="03">Março</option>
<option value="04">Abril</option>
<option value="05">Maio</option>
<option value="06">Junho</option>
<option value="07">Julho</option>
<option value="08">Agosto</option>
<option value="09">Setembro</option>
<option value="10">Outubro</option>
<option value="11">Novembro</option>
<option value="12">Dezembro</option>
</select>
</p>
<p><input type="submit" name="submit" value="enviar" /></p>	
</fieldset>
</form>
</body>
</html>

busca.jsp

<%
String cpf=request.getParameter("cpf");
String ano=request.getParameter("ano");
String mes=request.getParameter("mes");

ServletContext context = session.getServletContext();
String realContextPath = context.getRealPath("/");

String patharquivo = realContextPath;

if ( new java.io.File(patharquivo+"[Trecho que devo ignorar na comparação]"+cpf+ano+mes+".txt").exists() ) {
	out.println("Encontrado");
} else {
	out.println("Não foi encontrado");
}
%>

Os nomes dos arquivos são padronizados:
00000000056000005888000026704565020901.txt
00000000056000005888[ CPF ][AAMM].txt

explicando: preciso comparar os dados do formulário com o nome do arquivo a partir do 21o caractere. “000026704565020901.txt”

ou seja, preciso ignorar, para efeito da busca, até o 20o caractere, e a partir daí comparar os nomes (arquivo) com os dados do formulário.

Alguém pode me ajudar?
Tentei utilizar regexp mas não consegui.

Obrigado a todos.

2 Respostas

T
String cpf=request.getParameter("cpf");  
 String ano=request.getParameter("ano");  
 String mes=request.getParameter("mes");  
   
 ServletContext context = session.getServletContext();  
 String realContextPath = context.getRealPath("/");  
   
 String patharquivo = realContextPath;  

 File[] files = (new java.io.File (pathArquivo)).listFiles(); // temos de listar o diretório para encontrar determinado arquivo
 // Procure no array files o arquivo que você quer encontrar, cujo nome termina com "cpf+ano+mes+.txt".    
 // Não é necessário usar expressão regular; endsWith já é suficiente.
 ...
B

Obrigado thingol.

Segui sua dica:

File dir = new File(okpath);
if (dir.isDirectory()) {
    String[] arquivos = dir.list();
    for (String file: arquivos){
		String strOrig = file;

		if(strOrig.endsWith(documento+ano+mes+".txt")){
			out.println(mes+"/20"+ano+" - <a href='"+file+"' title='Fatura' target='_blank'>"+file+"</a><br>");
			ia++;
		}else{
			// out.println("Nenhuma documento disponível referente ao "+ mes +" de 20"+ ano +"<br>");
		}
    }

Estou tentando agora, caso não ache nada, que mostre a mensagem “Nenhuma documento disponível referente …”. Porém, como estou no for, ele a cada vez mostra a mensagem que não encontrou. E na verdade deveria ser somente no fim da busca toda.

Mas muito obrigado.
Abraço.

Criado 8 de fevereiro de 2009
Ultima resposta 9 de fev. de 2009
Respostas 2
Participantes 2