文件夹监视器Java代码打印报告两次
使用这个站点的一些答案,我用Java创建了一个小的文件夹监视器应用程序。它应该检查对特定文件夹的更改,并将这些更改输出到文本文件。不幸的是,每次更改都会打印两次报告。问题是我不知道报告的第一行是从哪里来的。请帮助我理解我做错了什么 请在下面查找代码。我删除了部分代码,因为它不影响问答文件夹监视器Java代码打印报告两次,java,directory,monitoring,Java,Directory,Monitoring,使用这个站点的一些答案,我用Java创建了一个小的文件夹监视器应用程序。它应该检查对特定文件夹的更改,并将这些更改输出到文本文件。不幸的是,每次更改都会打印两次报告。问题是我不知道报告的第一行是从哪里来的。请帮助我理解我做错了什么 请在下面查找代码。我删除了部分代码,因为它不影响问答 import java.io.File; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException;
import java.io.File;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
public class FolderMonitor {
public FolderMonitor() {}
//path to a folder you are monitoring
public static final String FOLDER = "D:\\WatchedDir";
public static void main(String[] args) throws Exception
{
System.out.println("monitoring started");
// The monitor will perform polling on the folder every 5 seconds
final long pollingInterval = 6 * 1000;
// Let's get a directory as a File object and sort all its files.
File folderToMonitor = new File(FOLDER);
File outputFile = new File("H:\\Dir_changes.txt");
if (!folderToMonitor.exists())
{
// Test to see if monitored folder exists
throw new RuntimeException("Directory not found: " + FOLDER);
}
FileAlterationObserver observer = new FileAlterationObserver(folderToMonitor);
FileAlterationMonitor monitor = new FileAlterationMonitor(pollingInterval);
FileAlterationListener listener = new FileAlterationListenerAdaptor()
{
// Is triggered when a file in the monitored folder is modified from
@Override
public void onFileChange(File file)
{
// "file" is the reference to the newly created file
try {writeToFile(outputFile, convertLongToDate(outputFile.lastModified()), ("File modified: "+ file.getCanonicalPath()));}
catch (IOException e) {e.printStackTrace();}
}
};
observer.addListener(listener);
monitor.addObserver(observer);
monitor.start();
}
private static void writeToFile(File filePath, String timeStamp, String caughtChange) throws IOException
{
FileWriter fileWriter = new FileWriter(filePath,true);
BufferedWriter bufferFileWriter = new BufferedWriter(fileWriter);
fileWriter.append("\r" + timeStamp + " - " + caughtChange + "\r");
bufferFileWriter.close();
}
private static String convertLongToDate(long input)
{
Date date = new Date(input);
Calendar cal = new GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MMM/dd hh:mm:ss z");
sdf.setCalendar(cal);
cal.setTime(date);
return sdf.format(date);
}
}
输出如下所示:
1454622374878文件已修改:D:\WatchedDir\second\inside3.txt
2016/Feb/04 04:46:25美国东部时间-文件修改:D:\WatchedDir\second\inside3.txt
我不知道突出显示(粗体)的部分是从哪里来的,以及如何去掉它。请帮忙 我运行了与您发布的相同的代码,在.txt文件中没有看到额外的输出。您可以尝试将输出定向到一个新文件,看看它是否有任何不同,因为Eclipse正在执行我已经从类中删除并保存更改的代码 在我重新启动Eclipse并再次执行代码之后,一切都正常运行(令人惊讶)
我考虑过删除这篇文章,但我决定离开它,以防有人会寻找这样一段代码。我将由版主决定是否删除此问题。感谢您抽出时间检查!