如何在每行Java末尾的csv文件中附加文本?

时间:2017-09-26 09:09:10

标签: java csv selenium

我有一个带有testdata的csv文件:

31-September-2017 01:52:57 02:11:25
31-September-2017 01:52:57 02:11:25

我想为每行末尾的每一行数据编写测试结果(PASS / FAIL),如下所示:

31-September-2017 01:52:57 02:11:25 PASSED
31-September-2017 01:52:57 02:11:25 FAILED

我使用openCSV api来读取文件内容。当我使用CSVWriter打开同一个文件时,它将删除该文件的所有内容。使用BufferedWriter也是同样的问题。

请建议我如何实现这一点,文件的原始内容保持不变,并将测试结果附加到每行的末尾。感谢。

2 个答案:

答案 0 :(得分:0)

使用BufferedReaderBufferedWriter

  • 逐行阅读文件
  • 逐行编写另一个文件
  • 在编写
  • 之前,将PASSED / FAILED添加到每一行
  • 删除旧文件并重命名新文件

我会尝试解释为什么这是最好的方式:

  • 效率很高(O(n)n是文件的大小)
  • 易于实现(读写部分的代码约为20-30行)
  • 具有可读性和可理解性(可读性非常重要。)

答案 1 :(得分:0)

类似下面的东西应该与opencsv一起使用。

import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Example {    
    public static void main(String[] args) {
        try {
            String fileName = "C:\\Users\\eritrean\\Desktop\\yourfile.csv";
            List<String[]> myEntries =  readFile(fileName);
            List<String[]> testedEntries = new ArrayList<>();
            for(String[] row : myEntries){
                String[] withTestResult = addTestResult(row,randomResult());
                testedEntries.add(withTestResult);
            }
            writeToFile(fileName,testedEntries);
        } catch (IOException ex) {

        }
    }
    public static List<String[]> readFile(String fileName) throws IOException {
        CSVReader reader = new CSVReader(new FileReader(fileName),'\t','\"',0);
        List<String[]> myEntries = reader.readAll();
        return myEntries;
    }

    public static String[] addTestResult(String[] row, String result){        
        return (String.join("\t", row)+"\t"+result).split("\t");
    }
    public static String randomResult(){  
        Random rand = new Random();
        return rand.nextBoolean()?"PASSED":"FAILED";
    }
    public static void writeToFile(String fileName, List<String[]> myEntries) throws IOException {
        try (CSVWriter writer = new CSVWriter(new FileWriter(fileName), '\t',CSVWriter.NO_QUOTE_CHARACTER)) {
            for(String[] row: myEntries){
                writer.writeNext(row);
            }
        }
    }    
}