java - 在文本文件中查找一行并编辑它

标签 java rename file-writing

我有以下代码:

   String mID = jTextField1.getText();
   String mType = jComboBox1.getSelectedItem().toString();
   String mFName = jTextField2.getText();
   String mLName = jTextField3.getText();
   String mHomePhone = jTextField4.getText();
   String mMobilePhone = mPhone2.getText();
   String mEmail = jTextField6.getText();
   String mHomeAddress = jTextField7.getText();
   //Defines the new line of data
   String newLine = (mID + " | " + mType + " | " + mFName + " | " + mLName + " | "
   + mHomePhone + " | " + mMobilePhone + " | " + mEmail + " | " + mHomeAddress); 

    try {
        File inFile = new File("Members2.txt");
        BufferedReader br;
        FileReader reader;
        try (PrintWriter writer = new PrintWriter(new BufferedWriter( new FileWriter("Member2_Temp.txt", true)))) {
           br = new BufferedReader(new FileReader(inFile));
           reader = new FileReader("Members2.txt");
           String line;
           while (null != (line = br.readLine())) {
               if (newLine.equals(line)) {
                   newLine = line.replace(line, newLine);
               }
               // Always write the line, whether you changed it or not.
               writer.println(newLine);
           }
            br.close();
            reader.close();
            writer.close();
       }

        File tempFile = new File("Member2_Temp.txt");
        Path source = tempFile.toPath();
        Path newdir = inFile.toPath();
        Files.move(source, newdir, REPLACE_EXISTING);

        dispose();
        new Edit_Member_Final().setVisible(true);

    } catch (IOException ex) {
        Logger.getLogger(Edit_Member_Final.class.getName()).log(Level.SEVERE, null, ex);
    } 

问题在于它仅将已编辑的行打印到文件中,而不打印其余未编辑的行。

如果我有 4 条记录,程序会出于某种原因打印编辑行 4 次。我该如何解决这个问题?

最佳答案

编辑

           BufferedReader br;
            try (PrintWriter writer = new PrintWriter(new BufferedWriter( new FileWriter("Member2_Temp.txt", true)))) {
               br = new BufferedReader(new FileReader(inFile));
               String line;

               while (null != (line = br.readLine())) {
                   if (newLine.equals(line)) {
                       line = line.replace(line, newLine);
                   }

                   // Always write the line, whether you changed it or not.
                   writer.println(line);
               }
                br.close();
                writer.flush();
                writer.close();

您只编写newLine,只有在找到匹配项时才会有数据

writer.println(newLine);

你也应该这样写line,添加else条件

if (newLine.equals(line)) {
    line= line.replace(line, newLine);
}

writer.println(line);

关于java - 在文本文件中查找一行并编辑它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35659361/

相关文章:

java - setOnPreferenceClickListener 帮助, Activity 启动时关闭

image - 在matlab中重命名图像文件名

PHP - 读取和写入相同的文件挂起

python - 删除文件的特​​定行

java - 当更新项目时我不希望 src/test/java 出现在 Eclipse java 构建路径源类别中时,如何配置 maven pom.xml?

java - 将 JUNG 移植到 GWT

mysql - 重命名 MySQL 中的重复行,WHERE IN () - 不能正常工作

python - 更改数据框行名称

c - 如何将多行写入 C 中的输出文件?

javascript - 显示未经验证的文档