Skip to content

Instantly share code, notes, and snippets.

@Viacheslav77
Last active March 2, 2016 00:30
Show Gist options
  • Select an option

  • Save Viacheslav77/5f2efdf949d0d48abfb0 to your computer and use it in GitHub Desktop.

Select an option

Save Viacheslav77/5f2efdf949d0d48abfb0 to your computer and use it in GitHub Desktop.
Написать монитор с помощью операторов пересечения списков, которых хранит дату модификации файлов и выводит сообщения при изменении в файлах* .*/
package Monitor2;
import java.io.File;
import java.util.Date;
public class filePlusData {
File file;
long lm;
public filePlusData(String path){
file = new File(path);
lm = file.lastModified();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((file == null) ? 0 : file.hashCode());
result = prime * result + (int) (lm ^ (lm >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
filePlusData other = (filePlusData) obj;
if (file == null) {
if (other.file != null)
return false;
} else if (!file.equals(other.file))
return false;
if (lm != other.lm)
return false;
return true;
}
public File getFile(){
return file;
}
public long getLM(){
return lm;
}
}
package Monitor2;
import java.lang.InterruptedException;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.io.*;
public class Monitor {
private String path;
private int timeout;
private List<filePlusData> prev = new ArrayList<filePlusData>();
private List<filePlusData> curr = new ArrayList<filePlusData>();
private IFileEvents events;
public Monitor(String path) throws IOException {
this.path = path;
createArray(prev);
}
public void start() throws IOException {
while (true) {
createArray(curr);
compareArrays(prev, curr);
prev.clear();
prev.addAll(curr);
System.out.println("Waiting...");
try {
Thread.sleep(timeout);
} catch (InterruptedException ex) {
return;
}
}
}
public int getTimeout() {
return timeout;
}
public void setTimeout(int value) {
timeout = value;
}
public IFileEvents getEvents() {
return events;
}
public void setEvents(IFileEvents value) {
events = value;
}
private void doFileAdded(filePlusData path2) {
if (events != null)
events.onFileAdded(path2.getFile());
}
private void doFileDeleted(filePlusData path2) {
if (events != null)
events.onFileDeleted(path2.getFile());
}
private void doFileModified(filePlusData path2) {
if (events != null)
events.onFileModified(path2.getFile());
}
private void compareArrays(List<filePlusData> prev2, List<filePlusData> curr2) throws IOException {
List<filePlusData> tmp = new ArrayList<filePlusData>();
tmp.addAll(curr2);
tmp.removeAll(prev2);
if( !(tmp.size()==0)){
if( curr2.size()>prev2.size())
doFileAdded(tmp.get(0));
else {
doFileModified(tmp.get(0));
}
return;
}
tmp.clear();
tmp.addAll(prev2);
tmp.removeAll(curr2);
if( !(tmp.size()==0)){
doFileDeleted(tmp.get(0));
return;
}
}
private void createArray(List<filePlusData> curr2) throws IOException {
File file = new File(path);
File[] list = file.listFiles();
int i=0;
curr2.clear();
for (File f : list) {
curr2.add(new filePlusData(f.getCanonicalPath()));
}
}
}
package Monitor2;
import java.io.File;
import java.io.IOException;
import java.sql.Date;
/*Написать монитор, которых хранит дату модификации файлов и
выводит сообщения при изменении в файлах* .*/
public class MyClass {
private static class MyEvents implements IFileEvents {
public void onFileAdded(File path) {
System.out.println("File added: " + path);
}
public void onFileDeleted(File path) {
System.out.println("File deleted: " + path);
}
public void onFileModified(File f) {
Date d = new Date(f.lastModified());
System.out.println("File "+ f + " мodified: " + d);
}
}
public static void main(String[] args) throws IOException {
Monitor m = new Monitor("d:\\1");
m.setTimeout(2000);
m.setEvents(new MyEvents());
m.start();
}
}
Waiting...
File added: D:\1\~$D.docx
Waiting...
Waiting...
File added: D:\1\D.docx
Waiting...
File deleted: D:\1\~WRL2710.tmp
Waiting...
Waiting...
Waiting...
File D:\1\D.docx мodified: 2016-03-02
Waiting...
Waiting...
File D:\1\N1.txt мodified: 2016-03-02
Waiting...
Waiting...
File D:\1\n2.txt мodified: 2016-03-02
Waiting...
Waiting...
Waiting...
File deleted: D:\1\n2.txt
Waiting...
Waiting...
Waiting...
Waiting...
package Monitor2;
import java.io.File;
public interface IFileEvents {
void onFileAdded(File path2);
void onFileDeleted(File path2);
void onFileModified(File path2);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment