java - 通过按钮操作从文件中删除一行

标签 java swing jtable jbutton

是的,我已经搜索过通过比较和匹配来删除特定行的方法,但是我的情况与我搜索到的情况不同,并且发生了错误的操作。

此处的代码是按钮 btnRemoveactionPerformed。它的作用是从表格中删除选定的单元格,并且还从文件 Activities.dat

中删除相应的单元格(字符串)值

但是,发生的情况是,代码将整个文件删除并留空,留下 1 个空行,而不仅仅是我想要删除的行。

btnRemove.addActionListener(new ActionListener() {

               public void actionPerformed(ActionEvent e)
               {

                    //Execute when button is pressed
                    int row = table.getSelectedRow(); 
                    int column = table.getSelectedColumn();

                    if (row >= 0) {
                        if (column >=0) {

                        for(int i=0; i<5; i++)
                         {
                            table.setValueAt("", row, column);     
                         }
                        }
                    }

                File file1 = new File("Activities.dat");
                try
                {
                    BufferedWriter writer = new BufferedWriter(new FileWriter(file1));
                    BufferedReader reader = new BufferedReader(new FileReader(file1));

                    Object lineToRemove = table.getValueAt(row, column);
                    lineToRemove.toString(); 
                    System.out.print(lineToRemove);

                    String currentLine;

                    while((currentLine = reader.readLine()) != null)
                    {
                    // trim newline when comparing with lineToRemove
                    String trimmedLine = currentLine.trim();

                    Object lineToRemove = table.getValueAt(row, column);
                    lineToRemove.toString();                                        

                    if(trimmedLine.equals(lineToRemove)) continue;
                        writer.write(currentLine);
                    }                                                               
                     writer.close();

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

最佳答案

您正在 while 循环中创建重复的 lineToRemove。如果将 line 的类型更改为 String 并分配 table.getValueAt(row, column).toString() 的值,效果也会更好code> 到它(并且之后不要更改它)。此外,您还需要在获取之前设置 [row, column] 的值。您将搜索 "" (如果不是一个好主意,则什么也不搜索)。尝试做这样的事情:

    btnRemove.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // Execute when button is pressed
            int row = table.getSelectedRow();
            int column = table.getSelectedColumn();
            if (row >= 0) {
                if (column >= 0) {
                    File file1 = new File("Activities.dat");
                    File temp = new File(file1.getAbsolutePath() + ".tmp"); // temp file
                    PrintWriter writer = null;
                    BufferedReader reader = null;
                    try {
                        writer = new PrintWriter(new BufferedWriter(new FileWriter(temp)), false);
                        reader = new BufferedReader(new FileReader(file1));
                        String lineToRemove = table.getValueAt(row, column).toString();
                        System.out.print(lineToRemove);
                        String currentLine;
                        while ((currentLine = reader.readLine()) != null) {
                            // trim newline when comparing with lineToRemove
                            String trimmedLine = currentLine.trim();
                            if (trimmedLine.equals(lineToRemove))
                                continue;
                            writer.println(currentLine);
                        }
                    } catch (IOException ex) {
                        Logger.getLogger(ActivityScreen.class.getName()).log(Level.SEVERE, null, ex);
                    } finally {
                        try {
                            if (reader != null)
                                reader.close();
                            if (writer != null) {
                                writer.flush();
                                writer.close();
                                file1.delete(); // delete the old one
                                temp.renameTo(file1); // make temp same as original
                            }
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                    }
                    table.setValueAt("", row, column);
                }
            }
        }
    });

关于java - 通过按钮操作从文件中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362478/

相关文章:

java - 如何动态更改 FormatedTextField 掩码?

Java: block 增量和单位增量有什么区别,这些值有什么用?

Java 实体 Bean 不会从数据库中删除行;仅来自 JTable

java - 如何将控制权返回到主要 Activity (基本 Android 应用程序)

java - 为什么我的锯齿测试音不播放?

Java 差异方法

java - 以下代码未完全运行

java - JScrollpane 与另一个 JPanel 中的 JPanel

java - 调整表头大小

Java Swing - 以编程方式从 JTable 复制到剪贴板