文件中存在重复键值对时如何读取属性文件?
Posted
技术标签:
【中文标题】文件中存在重复键值对时如何读取属性文件?【英文标题】:How to read the property file when duplicate key-value pair exist in the file? 【发布时间】:2013-12-28 23:55:19 【问题描述】:我正在使用属性类的load()
加载我的属性文件。我能够使用 set、hashmap、treeset、enumeration 读取属性类的键值对,但它不会检索重复的对。重复的对只检索一次。
【问题讨论】:
您的属性文件无效。键必须是唯一的。重新设计。 @EJP:如果属性文件中存在重复值,我知道它无效,这就是我想通过将每个键与其他键进行比较来显示的内容。我想创建一个方法,如果重复键存在那么它必须显示一些警报或消息,有什么办法吗? 没有什么能阻止你自己编写这样的方法,但这不是你要求的。 @EJP: 请原谅这个错误,但首先我需要从属性文件中读取所有键,即使它重复并且我无法读取重复的键,请让我知道这样做的方法....就像在我的属性文件中一样,我有 a=1,a=1,a=2 ......我想阅读所有三个 a 但我只能阅读它一次,即 a=2.... 你必须自己写。你不能使用Properties.load()。 【参考方案1】:属性文件设置键值对。所有键都是唯一的,因此它不会捕获重复的对。 相反,它将获取最新的映射对。例如:
示例文件:
a=1
b=2
c=3
d=4
a=10
c=7
属性类将返回最新的对,即
a=10
b=2
c=7
d=4
如果您的要求是查找所有对是否重复,请使用以下代码,该代码使用 Scanner 类和两个 arraylist 对象。
ArrayList k = new ArrayList();
ArrayList v = new ArrayList();
Scanner scan = new Scanner(new File("E:\\abc.properties"));
while(scan.hasNextLine())
//System.out.println(scan.nextLine());
String split[] = scan.nextLine().trim().split("=");
if(split.length == 2)
k.add(split[0]);
v.add(split[1]);
System.out.println("pair " + split[0] + ":" + split[1]);
//System.out.println("a");*/
【讨论】:
其实我的属性文件有值:a=1,a=2,a=4..........我想得到所有三个键,因为我想比较文件中的每个键与其他键显示文件中存在重复键,无论如何有可能吗? 然后它将 a=1 作为键值对。理想情况下,属性文件不应包含重复项。你还想做吗? 不,我想打印属性文件中多次存在的键 您在上面提供的代码非常有用,即使通过 scan.nextLine() 重复,它也会读取所有值,但在 Split[] 中存储时不会引发任何行发现异常。 您的文件一定有问题。正确终止最后一行。不要在最后一行后按回车键或将文件发送给我,我会检查它。【参考方案2】:来自 Apache Commons Configuration 的PropertiesConfiguration 支持加载具有相同键的多个条目的属性文件。
使用 getStringArray(key) 方法或 getList(key) 方法访问指定键的所有值。
【讨论】:
更新链接:commons.apache.org/proper/commons-configuration/apidocs/org/…【参考方案3】:您可以使用缓冲区阅读器读取文件的行并拆分结果:
public static void main(String[] args) throws IOException
Reader file = new FileReader("C:/file.cfg");
BufferedReader br = new BufferedReader(file);
String line = br.readLine();
while (line != null)
String obj[] = line.split("=");
for (int i=0 ; i<obj.length; i=+2 )
System.out.println(obj[i]+"="+obj[i+1]);
line = br.readLine();
【讨论】:
他不是要一段代码,没有任何解释。以上是关于文件中存在重复键值对时如何读取属性文件?的主要内容,如果未能解决你的问题,请参考以下文章
属性文件操作之Properties与ResourceBundle
如何在不干扰 iOS 中键值对序列的情况下读写 json 文件?