我用字符流,向一个TXT文本存入了集合里面的数据,怎么实现对文本中数据的增删减改
使用字符流读取文本文件中的数据,将其转换为集合对象,然后对集合进行增删减改操作,最后再将修改后的集合写回到文本文件中即可。
具体实现步骤如下:
BufferedReader
类读取文本文件中的数据,并使用Gson
库将读取到的JSON字符串转换为集合对象。BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
List<Data> dataList = new Gson().fromJson(reader, new TypeToken<List<Data>>(){}.getType());
// 添加数据
dataList.add(new Data("new data"));
// 删除数据
dataList.remove(0);
// 修改数据
dataList.get(0).setName("modified data");
BufferedWriter
类将集合对象转换为JSON字符串,并写入到文本文件中。BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt"));
writer.write(new Gson().toJson(dataList));
writer.close();
完整代码示例:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.*;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
// 读取数据
BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
List<Data> dataList = new Gson().fromJson(reader, new TypeToken<List<Data>>(){}.getType());
reader.close();
// 对数据进行增删减改操作
dataList.add(new Data("new data"));
dataList.remove(0);
dataList.get(0).setName("modified data");
// 写入数据
BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt"));
writer.write(new Gson().toJson(dataList));
writer.close();
}
}
class Data {
private String name;
public Data(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
来自github的源码,已验证,FileReader和FileWriter类都是java里最常用的,可以参考链接学习:https://blog.csdn.net/liuhenghui5201/article/details/8276278
import java.io.*;
import java.util.*;
public class FileOperation {
public static void writeToFile(String filePath, Set<String> dataSet) throws IOException {
FileWriter fw = new FileWriter(filePath, false);
BufferedWriter bw = new BufferedWriter(fw);
for (String data : dataSet) {
bw.write(data + "\n");
}
bw.close();
fw.close();
}
public static Set<String> readFromFile(String filePath) throws IOException {
Set<String> dataSet = new HashSet<String>();
FileReader fr = new FileReader(filePath);
BufferedReader br = new BufferedReader(fr);
String line = null;
while ((line = br.readLine()) != null) {
dataSet.add(line);
}
br.close();
fr.close();
return dataSet;
}
public static void addData(Set<String> dataSet, String data) {
dataSet.add(data);
}
public static void removeData(Set<String> dataSet, String data) {
dataSet.remove(data);
}
public static void modifyData(Set<String> dataSet, String oldData, String newData) {
if (dataSet.contains(oldData)) {
dataSet.remove(oldData);
dataSet.add(newData);
}
}
public static void updateFile(String filePath, Set<String> dataSet) throws IOException {
writeToFile(filePath, dataSet);
}
public static void main(String[] args) throws IOException {
Set<String> dataSet = readFromFile("data.txt");
addData(dataSet, "new data");
updateFile("data.txt", dataSet);
dataSet = readFromFile("data.txt");
removeData(dataSet, "old data");
updateFile("data.txt", dataSet);
dataSet = readFromFile("data.txt");
modifyData(dataSet, "old data", "new data");
updateFile("data.txt", dataSet);
}
}
你能向文本存入数据,那不就能读取文本中的数据了,读取后再进行数据的相关操作,最后重新写入是否就达到增删改的目的
首先,需要明确一下要对TXT文本中的何种数据进行增、删、改操作,因为这决定了使用什么方式进行IO操作。如果是对文本中的特定行或特定关键词进行操作,可以使用BufferedReader和BufferedWriter进行读写,然后再对数据进行操作。如果是对文本中的结构化数据进行操作,可以考虑使用CSV或XML等格式化输入输出库。
以下是一些可行的Java代码示例:
删除特定行数据:
String file = "data.txt";
File tempFile = new File("temp.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
String lineToRemove = "data to remove";
String currentLine;
while((currentLine = reader.readLine()) != null) {
if(currentLine.contains(lineToRemove)) continue;
writer.write(currentLine + System.getProperty("line.separator"));
}
writer.close();
reader.close();
tempFile.renameTo(new File(file));
修改特定行数据:
String file = "data.txt";
File tempFile = new File("temp.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
String lineToModify = "data to modify";
String modifyTo = "modified data";
String currentLine;
while((currentLine = reader.readLine()) != null) {
if(currentLine.contains(lineToModify))
writer.write(modifyTo + System.getProperty("line.separator"));
else
writer.write(currentLine + System.getProperty("line.separator"));
}
writer.close();
reader.close();
tempFile.renameTo(new File(file));
添加新数据:
String file = "data.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
String newData = "new data";
writer.write(newData + System.getProperty("line.separator"));
writer.close();
以上代码示例都是针对普通的文本数据,如果是操作结构化数据,可以使用专门的输入输出库,如:OpenCSV,Jackson等。通过这些库可以更方便地对CSV、JSON、XML等数据进行增、删、改操作。