Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
AMB

executar código de forma automática

Recommended Posts

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

Share this post


Link to post
Share on other 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."

 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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."

 

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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."

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.