2017-09-26 307 views
-2

我有TESTDATA csv文件:如何在每行Java末尾的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。

请建议我如何在原始文件内容保持不变的情况下实现此目标,并在每行末尾附加测试结果。谢谢。

+0

寻求调试帮助的问题(“为什么不用这个代码工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建[mcve]。使用“编辑”链接来改善你的*问题* - 不要通过评论添加更多信息。谢谢! – GhostCat

回答

0

这种用途BufferedReaderBufferedWriter

  • 逐行读取
  • 文件中的行写一行另一个文件中的行
  • 添加PASSED/FAILED每行写
  • 删除前旧文件并重命名新文件

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

  • 其高效(O(n)n是文件的大小)
  • 容易实现(只是约20-30线为读码和写作部分)
  • 将是易于阅读和理解(可读性是非常重要的一点。)
+0

为什么我们不能在同一个文件中写入,当我这样做的时候,为什么它会删除整个文件内容 – codefemme

+0

有可能在同一个文件中写入,但它们会覆盖文件指针之后的现有内容。例如:该文件看起来像这个'foo ||| bar'。现在你在'|||'之后写''xyz''。 filecontent将如下所示:'foo ||| xyz' – ParkerHalo

+0

请你解释一下为什么会发生,所以。因为我对此很陌生。 – codefemme

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); 
      } 
     } 
    }  
} 
相关问题