java - 用java编写时,仅在csv文件中添加一行

标签 java csv

我用java编写了用于写入csv文件的代码。但是我只能写入一行。从第二行开始,行不会被附加。

请检查下面的代码以获取 csv 文件

"1.0.0.0","1.0.0.255","16777216","16777471","AU","Australia"
"1.0.1.0","1.0.3.255","16777472","16778239","CN","China"
"1.0.4.0","1.0.7.255","16778240","16779263","AU","Australia"
"1.0.8.0","1.0.15.255","16779264","16781311","CN","China"
"1.0.16.0","1.0.31.255","16781312","16785407","JP","Japan"
"1.0.32.0","1.0.63.255","16785408","16793599","CN","China"
"1.0.64.0","1.0.127.255","16793600","16809983","JP","Japan"
"1.0.128.0","1.0.255.255","16809984","16842751","TH","Thailand"

用于在java中编写csv代码

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import au.com.bytecode.opencsv.CSVWriter;


public class CSVFileReader {

  public static void main(String[] args) {

    CSVFileReader obj = new CSVFileReader();
    obj.run();

  }

  public void run() {

String csvFile = "C:/Users/piyush bhatia/Desktop/whois.csv";

    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";
    String sFileName="C:/Users/piyush bhatia/Desktop/whois2.csv";

    try {

        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {

                // use comma as separator
            String[] country = line.split(cvsSplitBy);
                if(line.contains("AU"))
                {
                    FileWriter writer = new FileWriter(sFileName);
                    //writer.append(country[4]);
                    writer.write(country[2]);

                    //writer.append('\n');
                    writer.flush();
                    writer.close();


            System.out.println("Country [code= " + country[2] 
                                 + " , name=" + country[5] + "]");
                }
                else
                {

            System.out.println("");
                }


        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


 writer.flush(); // flush and close only once.
            writer.close();
    }

    System.out.println("Done");
  }

}

当我打印找到 AU 的值时,代码工作正常。但是当我创建 csv 文件时,它仅附加一行。它不会附加找到 AU 的第二行。创建新的 csv 文件时,仅附加第一个 AU 行。找到 AU 的第三行,它不会被打印。请指导我...

最佳答案

创建 FileWriter 对象并传入 boolean 参数 true 进行追加:

FileWriter writer = new FileWriter(sFileName, true);

或者将该对象的构造(以及刷新和关闭)移到循环之外。目前,每次向文件写入一行都会覆盖该文件的内容。

其他一些一般性评论:

  • 使用 CSV 解析库读取您的文件。有很多很好的例子,例如http://commons.apache.org/proper/commons-csv .

  • 为文件编写器使用正确的错误处理。目前,如果您有异常(exception),作家不会被关闭。如果您有 Java 7+,请使用 try-with-resources 语句。

关于java - 用java编写时,仅在csv文件中添加一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23625918/

相关文章:

java - eclipse RCP/SWT : How do you detect mouse events that happen elsewhere on the system

java - 替代 JAVA WAR/ZIP/JAR 阅读器/操纵器库

python - 将 2 个 csv 文件与一个唯一列但不同的标题合并

javascript - fast-csv 同步读取多个文件

python - 在同一个 CSV 文件中保存不同大小的多个列/变量

java - 我想在连续的噪音响起时激活我的传感器(Android Studio)

java - 套接字关闭错误

excel - 在 Matlab 中检索 Xlsx 或 csv

matlab - 在 MATLAB 中导入 CSV 文件

java - 路径行走/跟随不适用于所有情况