首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中向CSV中添加由数据组成的列

如何在Java中向CSV中添加由数据组成的列
EN

Stack Overflow用户
提问于 2018-10-20 01:38:44
回答 2查看 368关注 0票数 0

我们可以在CSV中添加一个新列作为最后一列吗?假设有3列,其中包含一些数据?所以这个新的将被添加为第四列,而且对于每一行,它都应该有随机数。

例如,

代码语言:javascript
复制
Id  Name   Address     Calculated
1   John    U.K.        341679
2   Vj      Aus         467123
3   Scott   U.S.        844257

据我所知,这将需要首先读取csv,for循环可能是迭代到最后一列,然后添加一个新的计算列,即写入csv。并且加值可以是Java的Random类。但如何才能做到这一点才是真正的问题。比如一个示例代码会很有帮助。

代码:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class Demo1 {

    public static void main(String[] args) throws IOException {

        String csvFile = "C:\\MyData\\Input.csv";
        String line = "";
        String cvsSplitBy = ",";
        String newColumn = "";
        List<String> aobj = new ArrayList<String>();


  /* Code to read Csv file and split  */

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {


            while ((line = br.readLine()) != null)  
            {
                String[] csvData = line.split(cvsSplitBy);  
                int arrayLength = csvData.length;  


            }
        }


        /* Code to generate random number  */
        String CHARS = "1234567890";
        StringBuilder random = new StringBuilder();
        Random rnd = new Random();
        while (random.length() < 18) { // length of the random string.
            int index = (int) (rnd.nextFloat() * CHARS.length());
            random.append(CHARS.charAt(index));
        }
        String finaldata = random.toString();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-20 15:46:53

基于@Plirkee示例代码和他的帮助,我制作了一个最终的工作代码。在这里分享它,以便对有类似需求的人有用。

代码语言:javascript
复制
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Random;


    public class Demo1 {

        public static String getRandomNumber() {

            String CHARS = "1234567890";
            StringBuilder random = new StringBuilder();
            Random rnd = new Random();
            while (random.length() < 18) // length of the random string.
            { 
                int index = (int) (rnd.nextFloat() * CHARS.length());
                random.append(CHARS.charAt(index));
            }
            String finaldata = random.toString();
            return finaldata;
        }

        public static void main(String[] args) throws IOException {
            File sourceCsvFile = null;
            File finalCsvFile = null;
            // String sourceCsvFileName = "";
            sourceCsvFile = new File("C:\\MyData\\Input.csv");
            finalCsvFile = new File("C:\\MyData\\Input_1.csv");
            String line = "";
            String cvsSplitBy = ",";



            BufferedWriter writer = new BufferedWriter(new FileWriter(finalCsvFile));


            try (BufferedReader br = new BufferedReader(new FileReader(sourceCsvFile))) // read the actual Source downloaded csv file
            {
                line = br.readLine();  // read only first line
                String newFileLine = line + cvsSplitBy  + "HashValue";  // append "," and new column <HashValue>
                writer.write(newFileLine);   // will be written as first line in new csv
                writer.newLine();  //  go to next line for writing next lines


                while ((line = br.readLine()) != null)  // this loop to write data for all lines except headers
                {

                    newFileLine = line + cvsSplitBy  + getRandomNumber();  // will add random numbers for each row

                    writer.write(newFileLine);
                    writer.newLine();

                }

            }

            writer.close();



            if(finalCsvFile.exists() && finalCsvFile.length() > 0)
            {
                System.out.println("New File with HashValue column created...");
                if(sourceCsvFile.delete()) 
                { 
                    System.out.println("Old File deleted successfully..."); 
                }

                else
                { 
                    System.out.println("Failed to delete the Old file..."); 
                } 
            }

            else if (!finalCsvFile.exists())
            {
                System.out.println("New File with HashValue column not created...");
            }




        }
    }
票数 0
EN

Stack Overflow用户

发布于 2018-10-20 04:27:14

很好,根据您提供的代码,这可能如下所示

(只是为了给你一个想法--我在这里即时写下它,没有测试...):

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class Demo1 {
    //moved your random generator here 
    public static String getRandomNumber() {
      /* Code to generate random number  */
        String CHARS = "1234567890";
        StringBuilder random = new StringBuilder();
        Random rnd = new Random();
        while (random.length() < 18) { // length of the random string.
            int index = (int) (rnd.nextFloat() * CHARS.length());
            random.append(CHARS.charAt(index));
        }
        String finaldata = random.toString();
        return finaldata;
     }

    public static void main(String[] args) throws IOException {

        String csvFile = "C:\\MyData\\Input.csv";
        String temporaryCsvFile = "C:\\MyData\\Output_temp.csv";
        String line = "";
        String cvsSplitBy = ",";
        String newColumn = "";
        List<String> aobj = new ArrayList<String>();


  /* Code to read Csv file and split  */

        BufferedWriter writer = new BufferedWriter(new FileWriter(
                temporaryCsvFile));


        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {


            while ((line = br.readLine()) != null)  
            {
                //String[] csvData = line.split(cvsSplitBy);  
                //int arrayLength = csvData.length;  
                //actually you don't even need to split anything 
                 String newFileLine = line + cvsSplitBy  + getRandomNumber();  
                 // ... We call newLine to insert a newline character.
                  writer.write(newFileLine);
                  writer.newLine();

            }
        }
              writer.close();
              //Now delete the old file and rename the new file
              //I'll leave this to you 


    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52897448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档