Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

AMB

executar código de forma automática

Mensagens Recomendadas

AMB

Boa Tarde

Gostaria que me ajudassem...

Eu tenho um código que lê ficheiros de uma pasta e insere os dados numa base de dados, assim que o ficheiro é lido este é eliminado da pasta. A questão é a seguinte, esta pasta está constantemente a ser actualizada com novos ficheiros, e que eu pretendia era que assim que entrasse um novo ficheiro na pasta o código fosse novamente executado, fiz-me entender??

Obrigada

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Podes estar constantemente a monitorar o directório, via código Java por exemplo, ou então executar o procedimento a cada x minutos, via código Java, ou a aplicação a cada x minutos, via agendamento no sistema.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Esse tipo de coisas não era possível fazer em Java, pelo menos de forma automática usando os clássicos File System watchers de outras linguagens, não sei em que ponto está a especificação para as alterações à API que permitem fazer esse tipo de operações usando o suporte base da plataforma, mas creio que é algo que apenas estará disponível na versão 7.

Até lá, terás de fazer o clássico poolling, ires periodicamente ver se existiram modificações na pasta usando uma thread para o efeito ou programando alguma tarefa de apoio à aplicação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AMB

E como coloco isso na prática :thumbsup: ???

Também vou ter de ter cuidado para não apagar nenhum ficheiro da pasta que ainda não tenha sido lido...

Desculpe minha ignorância, mas sou nova nesta matéria..

Obrigada

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Para agendar com o sistema, vê o Scheduler ou o AT no Windows, e o cron em Linux.

Para ser a tua aplicação a fazer isso, coloca o teu código numa thread e faz sleep para esta "acordar" a cada x segundos.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AMB

Eu já estou utilizando o thread.sleep, mas devo ter algo errado, porque não está acontecendo nada, não dá erro mas também não executa

package msi;

import java.awt.Toolkit;
import java.io.*;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.sql.Driver;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Open extends Thread
{
Toolkit toolkit;
Timer timer;

  public static void lerficheiro(){

  ArrayList<String> a= new ArrayList <String>();
   String linha = null;   

  try { 
   File f = new File("C:/msi");
      File[] lista = f.listFiles();

      for(File arquivo : lista) { 
       //System.out.println(arquivo.getAbsolutePath()); 

          // if (arquivo.length() > 1000)
           //	arquivo.delete();

           FileReader reader = new FileReader(arquivo); 
             BufferedReader leitor = new BufferedReader(reader); 


            while ((linha = leitor.readLine()) != null) { 
            	 StringTokenizer st; 
               st = new StringTokenizer(linha, "\t");   

                   String t = "<CR>";

	         Pattern p = Pattern.compile(t); 
	         Matcher m = p.matcher(linha);

	         while (m.find()) { 
	        	String x = arquivo.getPath();
	            System.out.println("" + x); 
	            System.out.println(m.group());

                           BufferedReader rd = new BufferedReader(new FileReader(x));
                           LineNumberReader lineNumberReader = new LineNumberReader(rd);

                           String id = null;
                           String nome = null;
                           String prim = null;
                           String ult = null;
                           String dn = null;
                           String ano = null;
                           String mes = null;
                           String dia = null;
                           String fimdn = null;
                           String fimdt = null;
                           String fimt = null;
                           int sex = 0;
                           String nr = null;
                           String sala = null;
                           String mod = null;
                           String sd = null;
                           String dat = null;
                           String tim = null;
                           String hora = null;
                           String min = null;
                           String seg = null;
                           Date data = null;

                                        Pattern pattern = Pattern.compile("(.+) <([^>]+)>"); 
                                        String line; 
                                        while ((line = lineNumberReader.readLine()) != null) { 
                                            Matcher matcher = pattern.matcher(line); 
                                            if (matcher.matches()) { 

											String chave = matcher.group(1); //lê a 1ª coluna
                                                System.out.println(chave);
                                                String valor = matcher.group(2); //lê a 2ª coluna
                                                System.out.println(valor);


                                                if (chave.equals("PATIENT_ID")) { 
                                               	                         id = valor;

                                               	                      } else if (chave.equals("PATIENT_NAME")) { 
                                               	                          nome = valor; 
                                               	                          int cont = nome.split(" ").length;
                                               	                          String s[] = nome.split("\\ ");
                                               	                          prim = s[0]; 
                                               	                          ult = s[cont-1];
                                               	      		             System.out.println(ult); 

                                               	                      } else if (chave.equals("PATIENT_BIRTH_DATE")) { 
                                               	                          dn = valor;
                                               	                          char[] letras = dn.toCharArray();
                                               	                          char primeira = dn.charAt(0);
                                               	                          char segunda = dn.charAt(1);
                                               	                          char terceira = dn.charAt(2);
                                               	                          char quarta = dn.charAt(3);

                                               	                          char priseg = dn.charAt(4);
                                               	                          char segseg = dn.charAt(5);

                                               	                          char priter = dn.charAt(6);
                                               	                          char segter = dn.charAt(7);

                                               	                          ano = (""+primeira+""+segunda+""+terceira+""+quarta+"");
                                               	                          mes = (""+priseg+""+segseg+"");
                                               	                          dia = (""+priter+""+segter+"");

                                               	                          fimdn = (""+dia+"-"+mes+"-"+ano+"");

                                               	                          SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy"); 
                                               	                          data = new java.sql.Date(format.parse(fimdn).getTime());


                                               	                      } else if (chave.equals("PATIENT_SEX")){

                                               	                    	  if (valor.equals("M")){
                                               	                    		  sex = 0;
                                               	                    	  }
                                               	                    	  else if (valor.equals("F")){
                                               	                    		  sex = 1;
                                               	                    	  }


                                               	                    	  System.out.println(sex);

                                               	                      } else if (chave.equals("STUDY_ID")){
                                               	                    	  nr = valor;

                                               	                      } else if (chave.equals("SCHEDULED_STUDY_RESOURCE")){
                                               	                    	  sala = valor;

                                               	                      } else if (chave.equals("MODALITY")){
                                               	                    	  mod = valor;

                                               	                      } else if (chave.equals("STUDY_DESCRIPTION")){
                                               	                    	  sd = valor;

                                               	                      } else if (chave.equals("SCHEDULED_STUDY_START_DATE")){
                                               	                    	  dat = valor;
                                               	                    	  char[] letras = dat.toCharArray();
                                               	                          char primeira = dat.charAt(0);
                                               	                          char segunda = dat.charAt(1);
                                               	                          char terceira = dat.charAt(2);
                                               	                          char quarta = dat.charAt(3);

                                               	                          char priseg = dat.charAt(4);
                                               	                          char segseg = dat.charAt(5);

                                               	                          char priter = dat.charAt(6);
                                               	                          char segter = dat.charAt(7);

                                               	                          ano = (""+primeira+""+segunda+""+terceira+""+quarta+"");
                                               	                          mes = (""+priseg+""+segseg+"");
                                               	                          dia = (""+priter+""+segter+"");

                                               	                          fimdt = (""+dia+"-"+mes+"-"+ano+"");

                                               	                      } else if (chave.equals("SCHEDULED_STUDY_START_TIME")){
                                               	                          tim = valor;

                                               	                          char[] letras = tim.toCharArray();
                                               	                          char primeira = tim.charAt(0);
                                               	                          char segunda = tim.charAt(1);

                                               	                          char priseg = tim.charAt(2);
                                               	                          char segseg = tim.charAt(3);

                                               	                          char priter = tim.charAt(4);
                                               	                          char segter = tim.charAt(5);

                                               	                          hora = (""+primeira+""+segunda+"");
                                               	                          min = (""+priseg+""+segseg+"");
                                               	                          seg = (""+priter+""+segter+"");

                                               	                          fimt = (""+hora+":"+min+":"+seg+"");

                                               	                      }   

                                                      }//end if


                                       }  //end while

	         String caminho = "C:/Programas/PTW/DiaSoft/DataBase/user.mdb";
                Driver d = (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 
                Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + caminho);

                Statement stm = con.createStatement();

               ResultSet rs = stm.executeQuery ("SELECT Id FROM PatientData WHERE Id = '"+nr+"'");

			if (rs.next()){
				String resultado = rs.getString("Id");
				System.out.println(resultado);

				Pattern p1 = Pattern.compile(resultado);
				Matcher m1 = p1.matcher(resultado);

				while(m1.find()){

					String aqui = arquivo.getAbsolutePath();
					System.out.println(aqui);
					arquivo.deleteOnExit();


					System.out.println("Apaguei ");

				}

			}else{
				try{
			    // System.out.println(" INSERT INTO PatientData (Id, Surname, [First Name], [Date Of Birth], Sex, [scheduled Study Resource], Modality, [study Description], [scheduled Study Start Date], [scheduled Study Start Time] VALUES ('"+nr+"','"+ult+"','"+prim+"','"+fimdn+"',"+sex+",'"+sala+"','"+mod+"','"+sd+"','"+fimdt+"','"+fimt+"')");
				stm.executeUpdate(" INSERT INTO PatientData (Id, Surname, [First Name], [Date Of Birth], Sex, [scheduled Study Resource], Modality, [study Description], [scheduled Study Start Date], [scheduled Study Start Time]) VALUES ('"+nr+"','"+ult+"','"+prim+"','"+fimdn+"',"+sex+",'"+sala+"','"+mod+"','"+sd+"','"+fimdt+"','"+fimt+"')");
				Thread.sleep(120000);
			     System.out.println("inseri");
				}catch(InterruptedException e){
					e.printStackTrace();
				}
			}
				  con.close();
                     rd.close(); 


	         } //end while

             } //end while
            reader.close();

   arquivo.delete();
      } //end for



             mostrar(a);

          } catch (Exception e) {  //end try
             e.printStackTrace(); 
          }  //end catch
       }  //end lerficheiro





public static void mostrar(ArrayList <String> b)
  {
     for (int i=0; i<b.size(); i++)
     {
        System.out.println(b.get(i));   

  }
  }

public void run(){

	lerficheiro();
	try {

		Thread.sleep(120000);

	} catch (InterruptedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}


public static void main(String[] args)
  {
     lerficheiro();

     }      
}

Obrigada

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Não tive tempo de ver como deve ser, mas parece-me que que estás a fazer o sleep na thread principal, e tens é e colocar o código lerficheiro() numa thread especifica e fazer sleep a essa thread.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.