简体   繁体   English

编辑文本文件中的行

[英]edit line in a text file

i've tried this code that i found in the internet我已经尝试过我在互联网上找到的这段代码

File file = new File("file.txt");
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line = "", oldtext = "";
        while((line = reader.readLine()) != null)
            {
            oldtext += line + "\n";

        }
        reader.close();
        // replace a word in a file
        //String newtext = oldtext.replaceAll("drink", "Love");

        //To replace a line in a file
        String replace = JOptionPane.showInputDialog("Enter what to replace: ");
        String toreplace = JOptionPane.showInputDialog("Enter where to replace: ");
        String newtext = oldtext.replaceAll(replace, toreplace);

        FileWriter writer = new FileWriter("file.txt");
        writer.append(newtext);writer.close();

but mine won't output like this code will do.但我的不会像这段代码那样输出。 the output of this code is like this:这段代码的输出是这样的:

unedit:未编辑:

jojo moyes
kim possible
dexter laboratory

edited: when i enter "mary" to edit "kim"已编辑:当我输入“mary”来编辑“kim”时

jojo moyes
mary possible
dexter laboratoty

but mine will be like this但我的会是这样

jojo moyes
kim possible
dexter laboratoy
mary possible

mine tho had register before editing.我的tho在编辑之前注册过。 and in the register there is also time that it will store something in the text file.并且在寄存器中还有时间在文本文件中存储一些东西。 and there goes the edit function if the user wants to edit something in the information that he entered (you get the picture)如果用户想要编辑他输入的信息中的某些内容(你得到图片),就会有编辑功能

EDITED: here's my code编辑:这是我的代码

public void Register_Edit_Info() throws IOException{
        FileWriter writeFile=new FileWriter("voters.txt", true);
        BufferedWriter outFile=new BufferedWriter(writeFile);
        File readFile=new File("voters.txt");   
        BufferedReader read=new BufferedReader(new FileReader(readFile));

        String choice2;
        String [] secondMenu = {"Register", "Edit", "Delete", "Back"};

        do{
            choice2=(String)JOptionPane.showInputDialog(null, "Please choose:", "Election 2765", 1, null, secondMenu, secondMenu[0]);
            switch(choice2){
            case "Register":
                String [] menuGender={"Male", "Female"};
                String [] menuStatus={"Single", "Married", "Widow(er)", "Legally separated"};

                do{
                age=Integer.parseInt(JOptionPane.showInputDialog("Age: "));
                while(age<18){
                    JOptionPane.showMessageDialog(null, "Voter should be 18 or above");
                    age=Integer.parseInt(JOptionPane.showInputDialog("Age: "));
                }
                name=JOptionPane.showInputDialog("Full Name: ");
                gender=(String)JOptionPane.showInputDialog(null, "Gender:", "Election 2765", 1, null, menuGender, menuGender[0]);
                if(gender=="Male"){
                    gender="Male";
                }
                else{
                    gender="Female";
                }
                dBirth=JOptionPane.showInputDialog("Date of Birth: ");
                pBirth=JOptionPane.showInputDialog("Place of Birth: ");
                address=JOptionPane.showInputDialog("Address\n(Province, City/Municipality, Barangay, House No./Street: ");
                status=(String)JOptionPane.showInputDialog(null, "Civil Status:", "Election 2765", 1, null, menuStatus, menuStatus[0]);
                if(status=="Single"){
                    status="Single";
                }
                else if(status=="Married"){
                    spouse=JOptionPane.showInputDialog("Spouse Name: ");
                    status="Married(Spouse: "+spouse+")";
                }
                else if(status=="Widow(er)"){
                    status="Widow(er)";
                }
                else{
                    status="Legally Separated";
                }
                citizenship=JOptionPane.showInputDialog("Citizenship:");
                job=JOptionPane.showInputDialog("Profession/Occupation: ");
                tin=JOptionPane.showInputDialog("Tin Number: ");
                father=JOptionPane.showInputDialog("Father's Full Name: ");
                mother=JOptionPane.showInputDialog("Mother's Full Name: ");
                votersNumber++; 

                vNumber=Integer.toString(votersNumber);

                outFile.append(vNumber+"/"+name+"/"+age+"/"+gender+"/"+dBirth+"/"+pBirth+"/"+address+"/"+status+"/"+citizenship+"/"+job+"/"+father+"/"+mother);
                outFile.newLine();

                selectYN=JOptionPane.showInputDialog("You are now registered. Do you want to register more?\n[1]Yes [2]No");
                }while(!"2".equals(selectYN));

                break;
            case "Edit":
                vNumForEdit=JOptionPane.showInputDialog("Enter voters number: ");
                String line=null, oldtext="";

                while((line=read.readLine())!=null){
                    oldtext+=line+"\n";

                    String [] info=line.split("/");
                    if(info[0].matches(vNumForEdit)){
                        String [] forEditMenu={"Name", "Age", "Gender", "Date of Birth", "Place of Birth", "Address", "Civil Status", "Citizenship", "Profession/Occupation", "Father's Name", "Mother's Name"};
                        forEdit=(String)JOptionPane.showInputDialog(null, line+"\n\nPlease select what you want to edit", "National Election 2765", 1, null, forEditMenu, forEditMenu[0]);
                        switch(forEdit){
                        case "Name":
                            oldName=JOptionPane.showInputDialog("Enter old name: ");
                            newName=JOptionPane.showInputDialog("Enter new name: ");

                            String newText = oldtext.replaceAll(oldName, newName);
                            outFile.append(newText);                            
                            break;
                        }
                    }
                }
            case "Delete":
                break;
            }
        }while(choice2!="Back");
        read.close();
        outFile.close();
    }

This Answer is for the first portion of your question.(before edit).此答案适用于您问题的第一部分。(编辑前)。

public static void main(String[] args) throws FileNotFoundException,IOException {
        File file = new File("file.txt");
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line = "", oldtext = "";
        while((line = reader.readLine()) != null)
            {
            oldtext += line + "\n";

        }
        reader.close();
        System.out.println(oldtext);
        // replace a word in a file
        //String newtext = oldtext.replaceAll("drink", "Love");

        //To replace a line in a file
        String replace = JOptionPane.showInputDialog("Enter what to replace: ");
        String toreplace = JOptionPane.showInputDialog("Enter where to replace: ");
        String newtext = oldtext.replaceAll(replace, toreplace);

        System.out.println(newtext);
        java.io.FileWriter writer = new java.io.FileWriter("file1.txt");
        writer.write(newtext);
        writer.close();
    }

When first prompt open I write "kim" and where to replace , I write "marry" and the output like this.当第一次提示打开时,我写“kim”和替换位置,我写“marry”和这样的输出。 I think your code is fine except not to use append() for FileWriter.我认为您的代码很好,只是不要对 FileWriter 使用append() you should use write() method for FileWriter.你应该对 FileWriter 使用write()方法。

在此处输入图片说明

EDIT: Use different file name (I don't know about if reading and writing operation occur for same file.) for FileWriter and for initialization you can use编辑:使用不同的文件名(我不知道是否对同一文件进行读写操作。)用于FileWriter和初始化,您可以使用

FileWriter writeFile=new FileWriter("voters1.txt");

And let me know if the problems is solved.如果问题得到解决,请告诉我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM