如何查看新内容的文件并检索该内容

我有一个名为foo.txt的文件。 该文件包含一些文本。 我想实现以下function:

  1. 我启动程序
  2. 写一些文件(例如添加一行: new string in foo.txt
  3. 我想获得此文件的新内容。

你能澄清这个问题的最佳解决方案吗? 此外,我想解决相关问题:如果我修改foo.txt我想看到差异。

我在Java中找到的最接近的工具是WatchService但如果我理解正确,这个工具只能检测文件系统上发生的事件类型(创建文件或删除或修改)。

Java Diff Utils就是为此目的而设计的。

 final List originalFileContents = new ArrayList(); final String filePath = "C:/Users/BackSlash/Desktop/asd.txt"; FileListener fileListener = new FileListener() { @Override public void fileDeleted(FileChangeEvent paramFileChangeEvent) throws Exception { // use this to handle file deletion event } @Override public void fileCreated(FileChangeEvent paramFileChangeEvent) throws Exception { // use this to handle file creation event } @Override public void fileChanged(FileChangeEvent paramFileChangeEvent) throws Exception { System.out.println("File Changed"); //get new contents List newFileContents = new ArrayList (); getFileContents(filePath, newFileContents); //get the diff between the two files Patch patch = DiffUtils.diff(originalFileContents, newFileContents); //get single changes in a list List deltas = patch.getDeltas(); //print the changes for (Delta delta : deltas) { System.out.println(delta); } } }; DefaultFileMonitor monitor = new DefaultFileMonitor(fileListener); try { FileObject fileObject = VFS.getManager().resolveFile(filePath); getFileContents(filePath, originalFileContents); monitor.addFile(fileObject); monitor.start(); } catch (InterruptedException ex) { ex.printStackTrace(); } catch (FileNotFoundException e) { //handle e.printStackTrace(); } catch (IOException e) { //handle e.printStackTrace(); } 

getFileContents是:

 void getFileContents(String path, List contents) throws FileNotFoundException, IOException { contents.clear(); BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8")); String line = null; while ((line = reader.readLine()) != null) { contents.add(line); } } 

我做了什么:

  1. 我将原始文件内容加载到List
  2. 我使用FileMonitor使用Apache Commons VFS来监听文件更改。 你可能会问, 为什么 ? 因为WatchService仅从Java 7开始提供,而FileMonitor至少使用Java 5(个人偏好,如果您更喜欢WatchService ,则可以使用它)。 注意 :Apache Commons VFS依赖于Apache Commons Logging ,您必须将两者都添加到构建路径才能使其正常工作。
  3. 我创建了一个FileListener ,然后实现了fileChanged方法。
  4. 该方法从文件中加载新内容,并使用Patch.diff检索所有差异,然后打印它们
  5. 我创建了一个DefaultFileMonitor ,它基本上监听文件的更改,然后我将文件添加到它。
  6. 我启动了显示器。

监视器启动后,它将开始监听文件更改。