Estou tentando monitorar uma pasta da seguinte maneira. Quando um arquivo é jogado na pasta monitorada o sistema pega o arquivo e renomeia. O problema é que só esta funcionando quando eu debugo.
package br.com.renomearxml;
import static java.nio.file.LinkOption.NOFOLLOW_LINKS;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import static java.nio.file.StandardWatchEventKinds.OVERFLOW;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import javax.swing.JOptionPane;
import java.nio.file.WatchEvent.Kind;
public class MonitorarPasta {
private Path pathCaminho;
public Path getPathCaminho() {
return pathCaminho;
}
public void setPathCaminho(Path pathCaminho) {
this.pathCaminho = pathCaminho;
}
public static void MonitorarPasta(Path caminho) {
// Verifica o caminho da pasta
try {
Boolean isFolder = (Boolean) Files.getAttribute(caminho, "basic:isDirectory", NOFOLLOW_LINKS);
if (!isFolder) {
throw new IllegalArgumentException("Caminho : " + caminho + " não é um caminho válido");
}
} catch (IOException ioe) {
// Pasta não existe
ioe.printStackTrace();
}
// Obtemos o caminho da pasta
FileSystem fs = caminho.getFileSystem();
// Criando serviço de monitorar com try() block
try (WatchService service = fs.newWatchService()) {
// Registramos o caminho para o serviço do WatchService
// Eventos... (ENTRY_CREATE,ENTRY_DELETE... )
caminho.register(service, ENTRY_CREATE);
// Inicie o loop de pesquisa infinita
WatchKey key = null;
while (true) {
key = service.take();
// Dequeueing events
Kind<?> kind = null;
for (WatchEvent<?> watchEvent : key.pollEvents()) {
// Pega o tipo de evento
kind = watchEvent.kind();
// Se o kind for do tipo OVERFLOW, fique no loop infinito
if (OVERFLOW == kind) {
continue; // loop
} else {
// Se criar algum arquivo no pasta do caminho...
// ENTRY_CREATE
if (ENTRY_CREATE == kind) {
// Pega o nome do arquivo( Um novo arquivo foi
// criado)
Path newPath = ((WatchEvent<Path>) watchEvent).context();
String strNomeAntigo = newPath.toString();
if (strNomeAntigo.startsWith("Nfe")) {
break; // loop
} else {
String strnomeNovo = "C:\\nfe\\saida\\" + "Nfe" + strNomeAntigo;
strNomeAntigo = "C:\\nfe\\saida\\" + strNomeAntigo;
File nomeAntigo = new File(strNomeAntigo);
File nomeNovo = new File(strnomeNovo);
nomeAntigo.renameTo(nomeNovo);
}
break; // loop
}
}
}
if (!key.reset()) {
break; // loop
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
package br.com.renomearxml;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.awt.event.ActionEvent;
public class FrmRenomearXml extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FrmRenomearXml frame = new FrmRenomearXml();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public FrmRenomearXml() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 145, 73);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton btnRenomearXml = new JButton("Renomear Xml");
btnRenomearXml.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
String caminhoPasta = ("C:\\nfe\\saida");
Path pastaQueVaiSerMonitorada = Paths.get(caminhoPasta);
MonitorarPasta objMonitorar = new MonitorarPasta();
objMonitorar.setPathCaminho(pastaQueVaiSerMonitorada);
objMonitorar.MonitorarPasta(objMonitorar.getPathCaminho());
} catch (Exception e) {
e.printStackTrace();
}
}
});
btnRenomearXml.setBounds(10, 11, 118, 23);
contentPane.add(btnRenomearXml);
}
}