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
Faz um código que lê de tempos em tempos a pasta…
Você pode usar um Timer pra agendar essa tarefa de maneira bem tranquila… Dá uma olhada nesse link:
http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/timer.html
E como coloco ele a ver a pasta por exemplo de 2 em 2 minutos???
Eu já tentei utilizar o Thread.sleep(120000), mas não está fazendo nada… :? só se tenho o código errado, mas também não está dando erro…
Obrigada
[quote=anamilagaia]E como coloco ele a ver a pasta por exemplo de 2 em 2 minutos???
Eu já tentei utilizar o Thread.sleep(120000), mas não está fazendo nada… :? só se tenho o código errado, mas também não está dando erro…
Obrigada[/quote]
poste o código que você tem que o pessoal ai te mostra onde você está errando…
um palpite seria que você não esta colocando isso num loop… você tem que colocar o que tiver para executar e depois o sleep dentro de um loop infinito…
Você não precisa criar uma Thread diretamente, pode usar o Timer como falei anteriormente.
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();
}
}
Desculpa a enormidade de código, mas é mais seguro não retirar nada… sim talvez seja isso, mas não percebo muito dessa matéria.
Obrigada
A apache em um pacote de utilidades commons para arquivos de todos os tipos :
http://commons.apache.org/vfs/index.html
Utilizando a filesystem :
http://commons.apache.org/vfs/apidocs/org/apache/commons/vfs/FileSystem.html
Voce pode adicionar um listernner ( para averiguar modificações do sistema de arquivos )
Provavelmente ele deve utilizar um agendamento por tempo de algum Thread para checar isso
contudo acredito que vale a pena , utilizar algo que foi feito e testado e que inda usa um conceito
mais elegante e apropriado ( o dos listeners) para este fim.