当前位置: 首页 > 面试题库 >

在Java中,什么是监视附加文件的最佳/最安全模式?

杜弘光
2023-03-14
问题内容

别人的过程是通过在事件发生时一次向其添加一行来创建CSV文件。我无法控制文件格式或其他过程,但我知道它只会追加。

在Java程序中,我想监视此文件,并在添加一行后读取新行并根据内容做出反应。现在忽略CSV解析问题。监视文件的更改并一次读取一行的最佳方法是什么?

理想情况下,这将使用标准库类。该文件很可能位于网络驱动器上,所以我想提供一些可以防止故障的文件。如果可能,我宁愿不使用轮询-我宁愿使用某种阻塞解决方案

编辑-鉴于标准类不可能使用阻塞解决方案(感谢您的回答),最健壮的轮询解决方案是什么?我不想每次都重新读取整个文件,因为它可能会变得很大。


问题答案:

从Java
7开始,FileSystem类上有了newWatchService()方法。

但是,有一些警告:

  • 只有Java 7
  • 这是一种可选方法
  • 它只监视目录,因此您必须自己处理文件,并担心文件移动等

在Java 7之前,无法使用标准API。

我尝试了以下操作(以1秒的间隔进行轮询),并且可以正常工作(仅在处理过程中打印):

  private static void monitorFile(File file) throws IOException {
    final int POLL_INTERVAL = 1000;
    FileReader reader = new FileReader(file);
    BufferedReader buffered = new BufferedReader(reader);
    try {
      while(true) {
        String line = buffered.readLine();
        if(line == null) {
          // end of file, start polling
          Thread.sleep(POLL_INTERVAL);
        } else {
          System.out.println(line);
        }
      }
    } catch(InterruptedException ex) {
     ex.printStackTrace();
    }
  }

正如没有人建议使用当前生产的Java的解决方案一样,我想我会添加它。如果存在缺陷,请添加注释。



 类似资料:
  • 我有一个java程序,它向Web服务发送一系列GET请求,并将响应体存储为文本文件。 我已经实现了下面的示例代码(过滤了大部分代码以突出显示相关内容),它附加了文本文件,并在EOF处作为新行写入。然而,代码工作得很好,但随着文件的大小变大,性能会受到影响。 数据的总大小几乎为4GB,并在avg上附加大约500KB到1MB的数据。 这些文件每天都会创建,并移动到hdfs以供hadoop使用,并作为实

  • 问题内容: 在Java桌面应用程序中存储密码的推荐方式是什么? 我希望用户只能输入一次凭证,而不会再次提示。 在个人项目中,我一直在使用Preferences API,但我假设这与以纯文本格式存储(安全方面)没有什么不同。 非常感谢 编辑: 非常感谢您的建议。毫无疑问,这似乎有些混乱,因为我可能还没有把问题弄清楚。 我将给出一个假设的情况: 假设我正在为远程数据库创建一个简单的前端,该前端使用用户

  • 问题内容: 根据您的经验,您可以推荐一些东西吗?我使用了izpack,它是一个非常不错的工具,还有其他更好的工具吗? 问题答案: 在MS Windows中,NSIS很棒,它是免费的,并且OSS 参考:具有自动JRE安装的Java启动器

  • 问题内容: 在Java中创建模拟对象的最佳框架是什么?为什么?每个框架的优缺点是什么? 问题答案: 我使用Mockito取得了成功。 当我尝试学习JMock和EasyMock时,我发现学习曲线有些陡峭(尽管也许就是我自己)。 我喜欢Mockito,因为它的语法简洁明了,我很快就能掌握。最小的语法旨在很好地支持常见情况,尽管几次我需要做一些更复杂的事情,但我发现我想要的东西是受支持的并且易于理解。

  • 问题内容: 我所工作的公司最近在我们托管的站点上遭受了许多标头注入和文件上传攻击,尽管我们已解决了标头注入攻击的问题,但我们仍未控制上载攻击。 我正在尝试建立一系列即插即用型上传脚本,以供内部使用,设计人员可以将其复制到其网站的结构中,修改一些变量,并在其上准备一个随时可以上传的表单他们的网站。我们正在寻求尽可能限制暴露的机会(我们已经关闭了fopen和shell命令)。 我在过去一个小时内对该网

  • 问题内容: 如何批量反编译许多类文件? 问题答案: JD-Gui使您的生活变得轻松,它还具有一个eclipse插件 编辑:更新了该工具的最新网址