当前位置: 首页 > 知识库问答 >
问题:

不会写入所有记录

寇夜洛
2023-03-14

我在Java中编写了一个更新由制表符分隔的文本文件的方法。我正在使用opencsv库。首先我在现有文件中读取,然后我更改一些列的值,然后我覆盖文件。我正在运行Windows 7。现在的问题是,并非所有内容都写入文件。即使我不更改任何值,只是覆盖文件,也不是所有记录都写入。

我的代码如下。它有什么问题?

 private void csvWrite(int[] boundary, String filename, int answerCount) {
        CSVReader csvReader = null;
        List<String[]> csvBody = null;
        try {
            csvReader = new CSVReader(new FileReader(PATH + FILE),'\t');
            csvBody = csvReader.readAll();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Search for the file
        int count = 0;
        for (String[] str : csvBody) {
            if (str[0].equals(filename)) {
                // found
                csvBody.get(count)[POS_START_INDEX+answerCount-2] = Arrays.toString(boundary);
                break;
            }
            count++;
        }

        try {
            csvReader.close();
            CSVWriter writer = new CSVWriter(new FileWriter(PATH + FILE),'\t');
            writer.writeAll(csvBody);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

共有1个答案

楚嘉玉
2023-03-14

我遇到了同样的问题。对我来说,这是因为我没有适当地关闭所有的读者和作家。在实现自动关闭后得到解决:

    private File writeToTempFile(File file) throws IOException {
    File tempFile = new File("/var/tmp/newcsv.csv");
    tempFile.createNewFile();
    try(FileReader fileReader = new FileReader(file);
    CSVReader csvReader = new CSVReaderBuilder(fileReader).withSkipLines(4).build();
    FileWriter outputFileWriter = new FileWriter(tempFile);
        CSVWriter writer = new CSVWriter(outputFileWriter, CSVWriter.DEFAULT_SEPARATOR,
                CSVWriter.NO_QUOTE_CHARACTER,
                CSVWriter.NO_ESCAPE_CHARACTER,
                CSVWriter.DEFAULT_LINE_END);){
        writer.writeAll(csvReader.readAll());
    }catch (Exception e){

    }
    return tempFile;
}
 类似资料:
  • 在我的客户端服务器应用程序中,我发现了一个奇怪的错误。我得到了以下方法: 每个方法向客户端发送一个字节数组 如果我只调用其中的2个,一切都正常,客户端会得到所有发送的字节数组。但是如果我调用所有3个,只有第一个和第二个到达客户端,以下方法的顺序并不重要。但是服务器说它们都是发送的。使用方法向客户端iam写入包中的所有长度也是有意义的。奇怪的一点来了: 如果我添加一个

  • 问题内容: 我有一个Java程序,它从文件中逐行读取一些文本,并将新文本写入输出文件。但是,程序完成后,并非我写入的所有文本都出现在输出文件中。这是为什么? 详细信息:该程序获取CSV文本文档,并将其转换为SQL命令,以将数据插入表中。文本文件有10000多行,类似于以下内容: 该程序似乎工作正常,只是它只是在创建一个新的SQL语句(将其打印到SQL文件中)的途中随机停在文件中。看起来像: 这发生

  • 我正在制作一个计算器,用户输入包含在EditText中。输入是通过屏幕上的按钮输入的,所以Android键盘被禁用。然而,当我想把所有的文本水平地写到一行时,你们就可以把它写进一行。 我试着通过设置android:maxLines=“1”和android:ellipsize=“end”来实现这一点,但这不起作用。文本仍在多行中,但只有一行可见,您需要垂直滚动以查看其他行。我还尝试使用android

  • 问题内容: 该表包含有关提供服务的部门的详细信息。该表包含由客户完成的针对特定服务的所有交易。在该条款中,应满足两个自助餐厅。我想得到一个报告,该报告显示给定期间内所有与交易有关的部门。我用过a,因为我想得到所有部门。SQL可以正常运行,并得到我想要的结果,除了, 如果在特定时期内没有针对特定服务的交易,则也将忽略该部门。我想做的是在结果集和COUNT(*)列中显示部门为0。 我怎样才能做到这一点

  • 问题内容: 我正在用phpmyadmin在记录表上运行请求,结果计数有所不同。例如,当显示结果时,它说“显示记录1-(〜180,234)”。 每次刷新时,此数字都会更改,并且不会添加或删除任何数据。 当我对记录执行SQL请求时,结果保持不变。这是phpMyAdmin的问题吗? 问题答案: 对于InnoDB表,请从phpMyAdmin的FAQ中获取: phpMyAdmin使用一种快速的方法来获取行数

  • 我的批处理作业不处理所有已读记录。 完成作业后,Spring批处理日志中读取了198282条记录,但在处理器中我有一条日志,在开始处理之前只记录了196503条,但有时,处理器处理了所有的记录。 步进 Spring启动版本:2.0.1