Verificar se a um arquivo dentro de uma pasta

12 respostas
R

Boa noite galera!

Como faço para verificar se tem um arquivo com qualquer nome mas com a extensão .txt…

fiz o seguinte mas não obtive sucesso:

private String arquivo = "C:\\Users\\Public\\Documents\\*.txt";


while(i<10) {     
            if(new File(arquivo).exists()){
           	 	System.out.println("Opa, existe!");
            }else{
            	System.out.println("Não existe");
            }
            i++;
        }

Depois precisarei do nome do arquivo…
se alguém puder ficaria grato…

12 Respostas

ezequiellorenzatti

Não compreendi o fluxo do seu código acredito que seja por ele não estar completo;

Segue um exemplo funcional em relação a pesquisa por arquivos em um diretório.
criei as variáveis caminhoValido e eDiretorio só para ficar mais claro.
utilizando o metodo .list() da classe File você obtém um array de Strings com o nome do arquivos do diretório.
checando se o nome do arquivo contem o termo da pesquisa o nome é mostrado.

String path = "C:\\Users\\Public\\Documents";
String pesquisar = ".txt";
File caminho = new File(path);
boolean caminhoValido = caminho.exists();
boolean eDiretorio = caminho.isDirectory();
	
if(caminhoValido && eDiretorio){
	String[] conteudo = caminho.list();
	for (String arquivo : conteudo) {
		if(arquivo.contains(pesquisar)){
			System.out.println(arquivo);
		}
	}
}

só lembrando que esse é um exemplo funcional e não o melhor jeito de fazer ok.

R

ezequiellorenzatti obrigado por responder…

é o seguinte aquele while vai ser infinito, pois vai ser um serviço cliente que vai ficar verificando se outro programa enviou um arquivo, e ira mandar para outro serviço no servidor.
Qual a melhor prática de ser verificar isso?

ezequiellorenzatti

Primeiro é necessário definir um cenário.

Esse programa que vai checar se um arquivo foi recebido ele precisa ter integridade de origem, é preciso saber de onde ele veio e se tem autorização para estar nessa pasta ?

ou ele simplesmente pega qualquer arquivo e envia ele para o destino e no destino o arquivo é tratado.

Outro fator é como esse arquivo chega até a pasta monitorada ? Copiar e Colar, Upload ?

a_comp83

Para verificar de tempos em tempos você poderia usar uma Thread.
Assim fica a cargo da JVM colocar esse processamento em execução conforme o tempo que você solicitou, evitando um uso a toa da cpu.
Para encontrar um arquivo de determinada extensão, utilize o método .endsWith(), da classe String.

O código ficaria assim, a grosso modo.
Sugiro que vc busque informações de manipulação de Thread, aqui no Guj mesmo

class MinhaThread extends Thread {
  int count;

  //Inicia o objeto com o caminho onde estarão seus arquivos
  File arquivosDiretorio = new File("C:\SeuCaminho");

  public void run() {
    System.out.println("MinhaThread inicia.");
	
    try {
      do {
        Thread.sleep(500);

        System.out.println("Chamando seu verificador de arquivos.");
        
		//Procura por arquivos dentro do diretório
		for (String arquivos : arquivosDiretorio.list()) {
			if (arquivos.endsWith(".txt")) {
				//Faz o que vc precisa
			}
		}
      } 

    } catch (InterruptedException exc) {
      System.out.println("MinhaThread interrompeu.");
    }
    System.out.println("MinhaThread terminou.");
  }
}
R

Obrigado a todo por responder…

ezequiellorenzatti

Então esse arquivo é gerado por outro programa e posto a pasta onde devo buscar, até ai eu não devo me preocupar…
Só devo me preocupar a partir disso.

preciso fazer um service que monitora e caso aja um arquivo com essa determinada extensão eu devo mandar para um outro serviço…

a_comp83

como posso fazer um serviço que fica monitorando essa pasta…
Eu sei criar um serviço… porem só sei criar um serviço que um programe o chame… não sei fazer com que ele rode independente monitorando e caso ache o arquivo mandar para outro serviço…

Poderia fazer um exemplo desse para mim ou me indicar alguns links…

agradeço desde já…

a_comp83

Não entendi bem o que vc quis dizer com fazer o serviço. Vc quer montar um webservice e um client pra consumir esse serviço?
O código que postei acima é uma trhread, ela ficará em execução o tempo todo e caso haja algum arquivo no diretório ele coletará pra vc.
Posso melhorar o código pra vc, preciso testar uma nova solução, mas preciso que me explique melhor o que vc precisa.

R

a_comp83 Muito obrigado pela sua paciência.

Bom vamos lá…
Preciso criar um webservice Para verificar se uma determinada pasta contem um arquivo com determinada extenção … quando o cliente ligar o computador o webservice deverá começar a monitorar essa pasta e irei enviar para outro webservice quando houver esse arquivo.

O problema é que não sei fazer um webservice que fique rodando sozinho.

Se eu criar um webservice com trhread ele ficara executando sozinho assim que ligar o computador?

Agradeço pela atenção?

a_comp83

rafael.kbeca… é exatamente isso, vc deve mesclar as duas tecnologias. Thread e Webservice.

Mas pelo que entendi do problema vc poderia fazer o seguinte, resolver um problema de cada vez.

Do lado do cliente.?
1 - Monte um aplicação simples (em swing mesmo). Essa aplicação ficará no computador do cliente e deverá conter sua thread. Essa thread sim irá monitorar a pasta do computador do cliente. Para que isso inicie juntamente como pc vc tem 2 alternativas: 1 - colocar a aplicação como um serviço do Windows ou simplesmente colocar ela no grupo “iniciar” do iniciar.
2 - Encontrando o arquvo ele irá enviar o arquivo por webservice. Aí vem minha dúvida. Esse webservice deverá ser desenvolvido por vc ou ele já existe?

R

Na verdade eu preciso desenvolver 2 webservice porque tenho que seguir o escopo dado a mim…
Não poço fazer com que a aplicação completa abra ao iniciar o windown… só posso fazer os serviços…
e sem falar que a aplicação que vou desenvolver é web… JSF2 com primefaces

Estou criando um serviço para ficar gerando um arquivo pramim só pra ver se intendi… quaquer coisa posto aqui

Obrigadão pela ajuda…

R

Vamos la...

Por via de intendimento, quero criar um webservice que fique gerando um arquivo pramim.

Segue meu código.

Interface:
package com.teste.prototipo;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface IServiçoPrototipo {

	@WebMethod
	public void run();
	
}

Classe:

package com.teste.prototipo;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;

import au.com.bytecode.opencsv.CSVWriter;

@WebService(endpointInterface = "com.teste.IServiçoPrototipo", serviceName = "Prototipo")
public class Prototipo extends Thread implements IServiçoPrototipo {
	
	
	public Prototipo() {
		run();
	}

	
	@WebMethod
	public void run() {
		System.out.println("MinhaThread inicia.");

		try {
			
			String arquivosDiretorio = new String("C:\\Users\\Public\\Documents\\teste.txt");
			
			while (true) {
				Thread.sleep(500);
				System.out.println("Chamando seu verificador de arquivos.");

				CSVWriter writer = new CSVWriter(new FileWriter(arquivosDiretorio));

				List<String[]> data = new ArrayList<String[]>();
				data.add(new String[] { "India", "New Delhi" });
				data.add(new String[] { "United States", "Washington D.C" });
				data.add(new String[] { "Germany", "Berlin" });

				writer.writeAll(data);

				writer.close();

			}

		} catch (InterruptedException exc) {
			System.out.println("MinhaThread interrompeu.");
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("MinhaThread terminou.");
	}

}

Xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Prototipo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  
  <context-param>
		<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>client</param-value>
	</context-param>
	<context-param>
		<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
		<param-value>resources.application</param-value>
	</context-param>
	<listener>
		<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
	</listener>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet>
		<servlet-name>IServiçoPrototipo</servlet-name>
		<servlet-class>com.teste.IServiçoPrototipo</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.xhtml</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>IServiçoPrototipo</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
</web-app>

Erros Jboss:

15:00:49,811 INFO [org.apache.coyote.http11] (MSC service thread 1-5) JBWEB003001: Coyote HTTP/1.1 initializing on : http-localhost/127.0.0.1:8080
15:00:49,823 INFO [org.apache.coyote.http11] (MSC service thread 1-5) JBWEB003000: Coyote HTTP/1.1 starting on: http-localhost/127.0.0.1:8080
15:00:50,060 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-4) JBAS010400: Limite da fonte de dados [java:jboss/datasources/ExampleDS]
15:00:50,287 WARN [org.jboss.as.ee] (MSC service thread 1-7) JBAS011006: Nenhuma instalação do componente com.teste.IServiçoPrototipo devido à exceção: java.lang.ClassNotFoundException: com.teste.IServiçoPrototipo from [Module "deployment.Prototipo.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:444) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:432) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:399) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:374) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:119) [jboss-modules.jar:1.2.0.Final-redhat-1]
at java.lang.Class.forName0(Native Method) [rt.jar:1.6.0_45]
at java.lang.Class.forName(Class.java:249) [rt.jar:1.6.0_45]
at org.jboss.as.server.deployment.reflect.DeploymentClassIndex.classIndex(DeploymentClassIndex.java:54)
at org.jboss.as.ee.component.deployers.EEModuleConfigurationProcessor.deploy(EEModuleConfigurationProcessor.java:78) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:120)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [rt.jar:1.6.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [rt.jar:1.6.0_45]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_45]

15:00:50,404 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.unit."Prototipo.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."Prototipo.war".INSTALL: JBAS018733: Falha ao proceder com a fase INSTALL do deployment "Prototipo.war"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127) [jboss-as-server-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [rt.jar:1.6.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [rt.jar:1.6.0_45]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_45]
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.teste.IServiçoPrototipo from [Module "deployment.Prototipo.war:main" from Service Module Loader]
at org.jboss.wsf.stack.cxf.metadata.MetadataBuilder.createDDEndpoint(MetadataBuilder.java:239)
at org.jboss.wsf.stack.cxf.metadata.MetadataBuilder.build(MetadataBuilder.java:82)
at org.jboss.wsf.stack.cxf.deployment.aspect.DescriptorDeploymentAspect.generateMetadataFromDeployment(DescriptorDeploymentAspect.java:141)
at org.jboss.wsf.stack.cxf.deployment.aspect.DescriptorDeploymentAspect.start(DescriptorDeploymentAspect.java:75)
at org.jboss.as.webservices.deployers.AspectDeploymentProcessor.deploy(AspectDeploymentProcessor.java:74)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:120) [jboss-as-server-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
... 5 more
Caused by: java.lang.ClassNotFoundException: com.teste.IServiçoPrototipo from [Module "deployment.Prototipo.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:444) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:432) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:374) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:119) [jboss-modules.jar:1.2.0.Final-redhat-1]
at org.jboss.wsf.stack.cxf.metadata.MetadataBuilder.createDDEndpoint(MetadataBuilder.java:235)
... 10 more

15:00:50,495 INFO [org.jboss.as.server] (ServerService Thread Pool -- 26) JBAS018559: Implantado "Prototipo.war" (runtime-name: "Prototipo.war")
15:00:50,503 INFO [org.jboss.as.controller] (Controller Boot Thread) JBAS014774: Relatório
de status de serviço JBAS014777: Serviços que falham na inicialização: service jboss.deployment.unit."Prototipo.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."Prototipo.war".INSTALL: JBAS018733: Falha ao proceder com a fase INSTALL do deployment "Prototipo.war"

Abraço.

a_comp83

Não tive tempo de testar a classe sua no Glassfish, mas primeiramente acho que o erro está na escrita da classe: ServiÇo vc está usando “ç” cedilha.
Tente usar sem acentuação, veja se vai.

R

Tambem tinha achado que era isso mas ja mudei e nada…

Vou indo testando aqui

Criado 30 de maio de 2013
Ultima resposta 3 de jun. de 2013
Respostas 12
Participantes 3