【问题标题】:write CSV file with modification写入带有修改的 CSV 文件
【发布时间】:2026-02-21 06:50:01
【问题描述】:

我正在使用一个大型 csv 文件,该文件具有大约 17 个属性和大约 40000 行的大型数据集。我想以相反的顺序写每行值的第 i 个位置(第 1 行第 i 个“,分隔值替换为第 40000 个第 i 个”,分隔...第二个替换为 39999... 同样全部)(这里我提取了第 12 个值= ith )。我该怎么做,请帮帮我。!!

package demo;
 import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.FileWriter;
import java.io.*;
/**
 *
/**
 *
 * @author admin
 */
public class Demo {

    /**
     * @param args the command line arguments
     */
      public static void main(String[] args)throws IOException {
        String filename = "bank-full.csv";
        File file = new File(filename);
        BufferedWriter writer = null;
        try {
            writer = new BufferedWriter(new FileWriter("bank-full_updated.csv"));
       } 
   catch (IOException e) {
        } 

        try {
            Scanner inputStream = new Scanner(file);
            inputStream.next();
            double Tuple;
            int count=0;
            Tuple = 0; 


     while (inputStream.hasNext()) 
     {
            String data = inputStream.next();         
            String[] values = data.split(";");
            double balance = Double.parseDouble(values[11]);  
            //balance=balance+1;
             values[11] = String.valueOf(balance);   
    count=count+1;

            // iterate through the values and build a string out of them
            StringBuilder sb = new StringBuilder();
            //  String newData = sb.toString();
            for (int i = 0; i < values.length; i++) {
                    sb.append(values[i]);
                    if (i < values.length - 1) {
                        sb.append(";");
                    }
             }
            // get the new string
            System.out.println(sb.toString());
            writer.write(sb.toString()+"\n");
                }
            writer.close();
            inputStream.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}

【问题讨论】:

  • 您发布的代码仅与问题陈述模糊相关。请澄清您是否需要反转文件的行(第 40,000 行与第 1 行交换,第 39,999 行与第 2 行交换,...​​)或者您是否确实需要修改行(如您的代码所示)。您从不说应该增加一个值 - 但您的代码连续增加第 12 项(不是第 11 项!)。
  • 抱歉...现在我已经进行了更改..实际上我想以相反的顺序写这些值。
  • 哪些“价值观”?文件的行还是每行的字段? (如果是后者:为什么要发布甚至没有接近的代码?)如果您需要反转行:读取行并将行存储在List&lt;String&gt; 中,然后按照@OferLando 的建议从最后一个迭代到第一个。

标签: java file csv filestream opencsv


【解决方案1】:

不知道你为什么要这样做,但听起来你需要将文件读入一个集合(例如 ArrayList),将每一行添加为记录,然后从末尾循环到列表开始 - 并将所有内容打印回(新)文件中......

【讨论】: