【问题标题】:read from csv, delete line based on first portion从 csv 读取,根据第一部分删除行
【发布时间】:2014-08-19 14:25:12
【问题描述】:

在我的应用程序中,我在 JList 中显示 CSV 每一行的第一部分,当它被选中并按下按钮(删除)时,我希望它根据第一个条目从文件中删除该行.我正在尝试你有一个临时文件然后写入它然后在最后重命名它的方法,但由于某种原因这不起作用。有什么想法吗?

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    // Delete service
    String selected = (String) jList1.getSelectedValue();
    File passwords = new File("/users/aak7133/desktop/passwords.txt");
    File temp = new File("/users/aak7133/desktop/temp.txt");

    try {
        BufferedReader reader = new BufferedReader(new FileReader(passwords));
        BufferedWriter writer = new BufferedWriter(new FileWriter(temp));
        String line;
        System.out.println(selected);
        while ((line = reader.readLine()) != null) {
            // trim newline when comparing with lineToRemove
            //String trimmedLine = line.trim();

            if (line.contains(selected)) {
                continue;
            }
            writer.write(line);
        }
        boolean successful = temp.renameTo(passwords);

    } catch (Exception e) {

    }
    updateList();
    clearFields();

} 

【问题讨论】:

  • 关闭你的读者和作者
  • 与我的问题无关
  • @erp 这就是为什么它只是一个评论 - 只是很好的编程建议。

标签: java swing csv io


【解决方案1】:

问题实际上是由开放的读写器引起的。这应该有效:

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
    String selected = (String) jList1.getSelectedValue();
    BufferedReader reader = null;
    BufferedWriter writer = null;
    try {
        File passwords = new File("/users/aak7133/desktop/passwords.txt");
        File temp = File.createTempFile("temp", ".txt", new File("/users/aak7133/desktop/"));
        reader = new BufferedReader(new FileReader(passwords));
        writer = new BufferedWriter(new FileWriter(temp));
        String line;
        System.out.println(selected);
        while ((line = reader.readLine()) != null) {
            // trim newline when comparing with lineToRemove
            // String trimmedLine = line.trim();

            if (line.contains(selected)) {
                continue;
            }
            writer.write(line + "\n");
        }
        if (passwords.canWrite()) {
            try {
                reader.close();
                reader = null;
            } catch (IOException ignore) {}

            try {
                writer.close();
                writer = null;
            } catch (IOException ignore) {}

            String path = passwords.getAbsolutePath();
            passwords.delete();
            boolean successful = temp.renameTo(new File(path));
            System.out.println(successful);

        }

    } catch (Exception e) {

    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException ignore) {}
        }
        if (writer != null) {
            try {
                writer.close();
            } catch (IOException ignore) {}
        }
    }
     updateList();
     clearFields();
}

【讨论】:

  • 在我之前没有看到你的帖子。这只是我丢失的 delete.passwords 。感谢m8的回复
【解决方案2】:

我发现我需要将passwords.delete() 放在temp.renameTo(passwords) 之前。这立即解决了问题。

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 1970-01-01
    • 2015-01-26
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多