如何用IO流对存入的数据修改和删除

我用字符流,向一个TXT文本存入了集合里面的数据,怎么实现对文本中数据的增删减改

使用字符流读取文本文件中的数据,将其转换为集合对象,然后对集合进行增删减改操作,最后再将修改后的集合写回到文本文件中即可。

具体实现步骤如下:

  1. 使用字符流读取文本文件中的数据,将其转换为集合对象。可以使用BufferedReader类读取文本文件中的数据,并使用Gson库将读取到的JSON字符串转换为集合对象。
BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
List<Data> dataList = new Gson().fromJson(reader, new TypeToken<List<Data>>(){}.getType());
  1. 对集合进行增删减改操作。根据需求对集合进行增删减改操作,例如:
// 添加数据
dataList.add(new Data("new data"));

// 删除数据
dataList.remove(0);

// 修改数据
dataList.get(0).setName("modified data");
  1. 将修改后的集合写回到文本文件中。可以使用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);
    }

}

你能向文本存入数据,那不就能读取文本中的数据了,读取后再进行数据的相关操作,最后重新写入是否就达到增删改的目的

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7486733
  • 这篇博客你也可以参考下:使用IO流把数据存到txt文件中
  • 您还可以看一下 夏曹俊老师的网络小说抓取软件的设计与研发——来自企业开发实践经验课程中的 单章节txt生成功能的实现小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,需要明确一下要对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等数据进行增、删、改操作。