我知道如何使用Java从文件中读取。我想要做的是读取以特定文本开头的特定行。
我打算做的是将某些程序设置存储在txt文件中,以便在退出/重新启动程序时快速检索它们。
例如,文件可能如下所示:
First Name: John
Last Name: Smith
Email: JohnSmith@gmail.com
Password: 123456789
:
将是分隔符,在程序中我希望能够根据“密钥”(例如“名字”,“姓氏”等)检索特定值。 / p>
我知道我可以将它存储到数据库中,但我想快速编写它来测试我的程序,而不必麻烦地将它写入数据库。
答案 0 :(得分:4)
看看java.util.Properties。它会执行您在此处要求的所有内容,包括解析文件。
示例代码:
File file = new File("myprops.txt");
Properties properties = new Properties();
try (InputStream in = new FileInputStream (file)) {
properties.load (in);
}
String myValue = (String) properties.get("myKey");
System.out.println (myValue);
注意:如果要在属性键中使用空格,则必须将其转义。例如:
First\ Name: Stef
Here是有关属性文件语法的文档。
答案 1 :(得分:1)
我想要做的是阅读以特定文字开头的特定行。
从文件的开头读取,跳过您不需要的所有行。没有更简单的方法。您可以将文件编入索引以便快速访问,但您至少扫描过一次文件。
答案 2 :(得分:0)
您可以使用Properties从文件中检索密钥和值
使用Properties
类
File file = new File("text.txt");
FileInputStream fileInput = new FileInputStream(file);
Properties properties = new Properties();
properties.load(fileInput);
fileInput.close();
Enumeration enuKeys = properties.keys();
while (enuKeys.hasMoreElements()) {
String key = (String) enuKeys.nextElement();
String value = properties.getProperty(key);//with specific key
System.out.println(key + ": " + value);//both key and value
}
您可以根据value
检索特定的key
。
System.out.println(properties.getProperty("Password"));//with specific key
答案 3 :(得分:0)
使用Java 8,您还可以通过以下方式将文件读入地图:
Map<String, String> propertiesMap = Files.lines(Paths.get("test.txt")) // read in to Stream<String>
.map(x -> x.split(":\\s+")) // split to Stream<String[]>
.filter(x->x.length==2) // only accept values which consist of two values
.collect(Collectors.toMap(x -> x[0], x -> x[1])); // create map. first element or array is key, second is value