我有一个文本文件,我想每次仅更新最后3个标签
更改将通过ID(1,2等)进行
p.g。(对于ID = 1 更改:10,18 / 10 / 18,7到12,21 / 10 / 18,2)
User.txt:
1,alex,pass,Admin,Alexandros,Karatzas,Male,18/10/1990,A'Likeiou,Antreas,Karatzas,6945952301,10,18/10/18,7
2,maria,pass1,User,Maria,Karatza,Female,18/10/1990,B'Likeiou,Antreas,Karatzas,6945952381,20,18/10/18,5
所以运行后,我想把它作为输出:
1,alex,pass,Admin,Alexandros,Karatzas,Male,18/10/1990,A'Likeiou,Antreas,Karatzas,6945952301,12,21/10/18,2
2,maria,pass1,User,Maria,Karatza,Female,18/10/1990,B'Likeiou,Antreas,Karatzas,6945952381,20,18/10/18,5
代码搜索ID,读写数据,但是我如何每次都能替换最后3个标签?
源代码:
@FXML
TextField ID3,abs,Dabs,Fabs
@FXML
public void UseAddAbs() throws IOException { //Kanei Add tis Apousies sinfona me to ID
String searchText = ID3.getText();
Path p = Paths.get("src", "inware", "users.txt");
Path tempFile = Files.createTempFile(p.getParent(), "usersTemp", ".txt");
try (BufferedReader reader = Files.newBufferedReader(p);
BufferedWriter writer = Files.newBufferedWriter(tempFile)) {
String line;
// copy everything until the id is found
while ((line = reader.readLine()) != null) {
writer.write(line);
if (line.contains(searchText)) {
writer.write("," + Fabs.getText());
writer.write("," + Dabs.getText());
writer.write("," + abs.getText());
break;
}
writer.newLine();
}
// copy remaining lines
if (line != null) {
writer.newLine();
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
}
}
// copy new file & delete temporary file
Files.copy(tempFile, p, StandardCopyOption.REPLACE_EXISTING);
Files.delete(tempFile);
}
答案 0 :(得分:1)
分割线并处理字段:
while ((line = reader.readLine()) != null) {
String[] fields = line.split("[,]");
if (fields[0].equals(searchID)) {
fields[12] = "12";
fields[13] = "21/10/18";
fields[14] = "2";
}
writer.println(String.join(",", fields));
}
更新:我的代码:
public static void main(String[] args) {
try {
String searchText = "1";
Path p = Paths.get(".", "users.txt");
Path tempFile = Files.createTempFile(p.getParent(), "usersTemp", ".txt");
try (BufferedReader reader = Files.newBufferedReader(p);
BufferedWriter writer = Files.newBufferedWriter(tempFile)) {
String line;
// copy everything until the id is found
while ((line = reader.readLine()) != null) {
String[] fields = line.split("[,]");
if (searchText.equals(fields[0])) {
for (int i = 0; i < fields.length; ++i) {
System.out.println(i + ": " + fields[i]);
}
fields[12] = "12";
fields[13] = "21/10/18";
fields[14] = "2";
}
writer.write(String.join(",", fields));
writer.newLine();
}
}
// copy new file & delete temporary file
Files.copy(tempFile, p, StandardCopyOption.REPLACE_EXISTING);
Files.delete(tempFile);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 1 :(得分:0)
您可以将行拆分为数组,并更新最后3个数组元素。 然后,您所要做的就是从该数组中构建新行,然后编写此行而不是旧行。
示例:。
while ((line = reader.readLine()) != null) {
if (line.contains(searchText)) {
String updatedLine = updateLastNStrings(line, 3);
writer.write(updatedLine);
break;
} else {
writer.write(line);
}
writer.newLine();
}
private String updateLastNStrings(String line, int n) {
String [] parts = line.split(",");
for (int i = parts.length - n; i < parts.length; i++) {
// update String
String newPart = parts[i] + "_UPDATED";
parts[i] = newPart;
}
return String.join(",", parts);
}
输入:
1,alex,pass,Admin,Alexandros,Karatzas,Male,18/10/1990,A'Likeiou,Antreas,Karatzas,6945952301,10,18/10/18,7
2,maria,pass1,User,Maria,Karatza,Female,18/10/1990,B'Likeiou,Antreas,Karatzas,6945952381,20,18/10/18,5
结果
1,alex,pass,Admin,Alexandros,Karatzas,Male,18/10/1990,A'Likeiou,Antreas,Karatzas,6945952301,12_UPDATED,21/10/18_UPDATED,2_UPDATED
2,maria,pass1,User,Maria,Karatza,Female,18/10/1990,B'Likeiou,Antreas,Karatzas,6945952381,20,18/10/18,5
请注意用_UPDATED
注意
除此之外,您发现的代码还有缺陷,因为要查找ID,它正在搜索行是否包含charSequence。如果ID是行的内容怎么办?
示例:
1,some_content,2,3
2,some_content,1
您尝试查找ID为2
的行,第一行将被更新,而不是第二行。