在Java中更新列表而不重新启动应用程序

在Java中更新列表而不重新启动应用程序,java,Java,我有一个预定义的电话号码列表要在我的应用程序中阻止,该列表是根据PhoneListFilter构造函数中输入的文件创建的 我需要能够添加和删除此列表中的项目,而无需重新启动应用程序。我正在考虑实现FileWatcher,它可以启动一个线程,每隔5分钟左右检查文件是否有任何更改,并更新列表。这是一个好方法还是我应该用不同的方法 PhoneListFilter.java import java.io.File; import java.io.FileNotFoundException; import

我有一个预定义的电话号码列表要在我的应用程序中阻止,该列表是根据PhoneListFilter构造函数中输入的文件创建的

我需要能够添加和删除此列表中的项目,而无需重新启动应用程序。我正在考虑实现FileWatcher,它可以启动一个线程,每隔5分钟左右检查文件是否有任何更改,并更新列表。这是一个好方法还是我应该用不同的方法

PhoneListFilter.java

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class PhoneListFilter {

private List<String> phoneList;

public PhoneListFilter() {
    phoneList = new ArrayList<>();
    try {
        Scanner s = new Scanner(new File("PhonesToBlockList"));
        while (s.hasNext()) {
            phoneList.add(s.next());
        }
        s.close();
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    }
}

public boolean shouldBlock(PhoneRequest phoneRequest) {
    if (phoneList.contains(phoneRequest.getPhoneNumber())) {
        return true;
    }
    return false;
}
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共类PhoneListFilter{
私人列表电话列表;
公用电话列表筛选器(){
phoneList=新的ArrayList();
试一试{
扫描器s=新扫描器(新文件(“PhonesToBlockList”);
而(s.hasNext()){
添加(s.next());
}
s、 close();
}捕获(FileNotFoundException ex){
例如printStackTrace();
}
}
公共布尔值shouldBlock(PhoneRequest PhoneRequest){
if(phoneList.contains(phoneRequest.getPhoneNumber())){
返回true;
}
返回false;
}
}

它是什么类型的应用程序?你有数据库吗?这个方法多久调用一次?这个文件有多大?请注意,如果您希望当前拥有的代码具有最佳性能,则应使用哈希集(O(1))而不是ArrayList(O(n))。您可以使用内置的
WatchService
,而不是每5分钟检查一次。看,我假设你正在开发一个移动应用程序。我会使用关系数据库引擎,比如处理阻塞的数字。