文件里存的是:101 王五 男 22 南京 0905   修改文件 :我想先把此条记录先用split(" ")分开,然后再比较,当我输入编号101时 显示此条记录,然后再修改此条记录的某个数据。其他不变
    删除文件: 当输入编号101时,即删除此条记录
    请大家帮忙写写,给点思路,感谢?   
    public void modifyStu(){
      // TODO
    }
    public void deleteStu(){
      //TODO
    }
   

解决方案 »

  1.   

    1. 将序号(如101)和该记录在文件中存放的位置,记录在类似vector这样的容器中;
    2. 修改记录时,首先输入序号->到vector查找对应该序号的记录的存放位置,假设为offset;
    3. 定位到文件的offset位置,修改该这条记录,并保存即可;
    4. 删除记录时,思路和上相同,只是记录被删除的情况要同步反应在vector容器中;
    5. 在程序退出时,要记得将vector中的数据保存到硬盘上作为索引文件;
    6. 在程序启动是,要记得将硬盘的索引文件读入vector容器中。对于上面提及的vector容易,楼主可以自己写一个
      

  2.   

    可以通过HashMap来实现,先把文件里一条一条的记录存在map里,以前面的数字为key,剩下的部分是value。增删查改都很方便。换句话说,为啥不用数据库?
      

  3.   

    写了一个修改:lord.txt内容如下
    [code=BatchFile]
    101 wangwu male 22 nanking 0905 
    102 zhaoliuOldDataInColumn1 femaleOldDataInColumn2 16OldDataInColumn3 nanking4 09055
    [/code]
    ReadWriteFile.java如下import java.io.*;
    /**
     * 
     * 功能描述:创建TXT文件并进行读、写、修改操作
     * 
     */
    public class ReadWriteFile {
    public static BufferedReader bufread;
    // 指定文件路径和名称
    private static String path = "D:/lord.txt";
    private static File filename = new File(path);
    private static String readStr = ""; public static String readTxtFile(String no) {
    String read;
    FileReader fileread;
    try {
    fileread = new FileReader(filename);
    bufread = new BufferedReader(fileread);
    try {
    while ((read = bufread.readLine()) != null) {
    //readStr = readStr + read + "\r\n";
    String pattern = "\\s";
    String newNo = read.split(pattern)[0];
    if(newNo.equals(no))
    {
    readStr =read;
    break;
    }
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    System.out.println(readStr);
    return readStr;
    }
    public static void replaceTxtByStr(String oldStr,String replaceStr) {
            String temp = "";
            try {
                File file = new File(path);
                FileInputStream fis = new FileInputStream(file);
                InputStreamReader isr = new InputStreamReader(fis);
                BufferedReader br = new BufferedReader(isr);
                StringBuffer buf = new StringBuffer();            // 保存该行前面的内容
                for (int j = 1; (temp = br.readLine()) != null
                        && !temp.equals(oldStr); j++) {
                    buf = buf.append(temp);
                    buf = buf.append(System.getProperty("line.separator"));
                }            // 将内容插入
                buf = buf.append(replaceStr);            // 保存该行后面的内容
                while ((temp = br.readLine()) != null) {
                    buf = buf.append(System.getProperty("line.separator"));
                    buf = buf.append(temp);
                }            br.close();
                FileOutputStream fos = new FileOutputStream(file);
                PrintWriter pw = new PrintWriter(fos);
                pw.write(buf.toString().toCharArray());
                pw.flush();
                pw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } /**
     * main方法测试
     * 
     * @param s
     * @throws IOException
     */
    public static void main(String[] s) throws IOException {
    //读102号数据
    String no = "102";
    ReadWriteFile.readTxtFile(no);

        String[] strs = readStr.split("\\s");
        //改第1个数据:
        strs[1] = "新的数据";
        
        String newLine ="";
       for (int i = 0; i < strs.length; i++) {
    newLine+=strs[i]+" ";
       }
        ReadWriteFile.replaceTxtByStr(readStr,newLine);
        
        
    //读102号数据
    no = "102";
    ReadWriteFile.readTxtFile(no);
    }

    }