0
Good morning, I would like to know how to compare several txt files with Mysql, so when I create a txt file in the folder it does not re-enter the data of the other txt files in Mysql. I am using Jnotify to run in real time and insert the TXT file data into Mysql every time a txt file is inserted into the folder.
The txt file data is "000040;034050500" Each txt there is only one information of this above.
Follows my code:
import net.contentobjects.jnotify.JNotify;
import net.contentobjects.jnotify.JNotifyListener;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Iterator;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
try {
observarPasta();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void observarPasta() throws Exception {
// criei uma pasta temp para observar os arquivos que forem
// criados e alterados dentro dela, mas pode ser alterado
// para um arquivo especifico
String path = "c:\\Users\\solutel\\Documents\\tabela\\";
// a mask é as ações que vão ser observadas, mas pode
// ser utilizado JNotify.FILE_ANY para monitorar tudo
// também.
int mask = JNotify.FILE_CREATED |
JNotify.FILE_DELETED |
JNotify.FILE_MODIFIED |
JNotify.FILE_RENAMED;
// monitorar subPastas?
boolean watchSubtree = true;
// adiciona o "MONITORADOR"
int watchID = JNotify.addWatch(path, mask, watchSubtree, new Listener());
//Fica esperando um tempo até terminar a aplicação
//Dependendo da implementação da sua aplicação
//isso não será necessário mas para esse teste é interessante
Thread.sleep(1000000);
// aqui remove o seu "MONITORADOR"
boolean res = JNotify.removeWatch(watchID);
if (!res) {
// o id foi inválido.
}
}
//essa implementação ja se explica com seus métodos
static class Listener implements JNotifyListener {
public void fileRenamed(int wd, String rootPath, String oldName, String newName) {
print("renomeado " + rootPath + " : " + oldName + " -> " + newName);
}
public void fileModified(int wd, String rootPath, String name) {
print("modificado " + rootPath + " : " + name);
}
public void fileDeleted(int wd, String rootPath, String name) {
print("deletado " + rootPath + " : " + name);
}
public void fileCreated(int wd, String rootPath, String name) {
print("criado " + rootPath + " : " + name);
String dir = "C:\\Users\\solutel\\Documents\\tabela";
File file = new File(dir);
for(String arq : file.list()){
if(arq.endsWith(".txt")){
try{
System.out.println(leitura(dir + "\\" + arq));
}
catch(Exception ex){}
}
}
private static String leitura(String dir) throws Exception {
Class.forName("org.gjt.mm.mysql.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Radius","root","admin");
Statement stm = con.createStatement();
BufferedReader reader = new BufferedReader(new FileReader(new File(dir)));
String dados[] = new String[3];
String linha = "", conteudo = "";
while((linha = reader.readLine()) != null){
StringTokenizer st = new StringTokenizer(linha,";\"");
dados[0] = st.nextToken();
dados[1] = st.nextToken();
}
stm.executeUpdate("insert into radcheck (username,attribute,op,value) values ('"+dados[0]+"','" +"User-Password"+ "','"+ ":="+ "','"+dados[1]+"')");
linha = reader.readLine();
if(!linha.isEmpty()){
conteudo = new StringBuilder(conteudo).append(linha.concat("\n")).toString();
}
reader.close();
return conteudo;
}
void print(String msg) {
System.err.println(msg);
}
}
}
The simplest way I see is a query to the value before inserting it.
– Krismorte
How can I do that? Can you give me an example? Thank you
– Alex Inoue