使用Java在csv文件中分隔两个不同星号之间的数据

问题描述 投票:1回答:2

我仍然是Java的新手并且正在努力学习。我正在尝试用Java创建一个程序,它能够读取我在.CSV驱动器中的C:\文件,一旦读取,我希望它在评论之间将数据分成更新的.CSV文件CSV

例如,我们有原始的CSV数据文件,如下所示:

 *File A
 *Name, Address, City, Country, Zip
 "John","123 Main Street","NY","USA","12345"
 "Jane","456 Main Street","NY","USA","12345"
 "Smith","789 Main Street","NY","USA","12345"
 *File B
 *Name, Address, City, Country, Zip
 "Jose","123 Main Street","NY","USA","12345"
 "Brandon","456 Main Street","NY","USA","12345"
 "Mike","789 Main Street","NY","USA","12345"
 *File C
 *Name, Address, City, Country, Zip
 "Kathy","123 Main Street","NY","USA","12345"
 "Jai","456 Main Street","NY","USA","12345"
 "Michael","789 Main Street","NY","USA","12345"

所以基本上我试图找到能够读取CSV文件的东西,在*File文件中查找CSV的前缀,然后将能够创建新文件,其中包含介于两者之间的所有内容。例如:

 CSV1:
 *Name, Address, City, Country, Zip
 "John","123 Main Street","NY","USA","12345"
 "Jane","456 Main Street","NY","USA","12345"
 "Smith","789 Main Street","NY","USA","12345"

 CSV2:
 *Name, Address, City, Country, Zip
 "Jose","123 Main Street","NY","USA","12345"
 "Brandon","456 Main Street","NY","USA","12345"
 "Mike","789 Main Street","NY","USA","12345"

 CSV3:
 *Name, Address, City, Country, Zip
 "Kathy","123 Main Street","NY","USA","12345"
 "Jai","456 Main Street","NY","USA","12345"
 "Michael","789 Main Street","NY","USA","12345"

我能够找到一些能够读取CSV文件但却不知道如何划分它。以下是读取文件的代码:

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;

    public class csvReader
    {
        public static void main(String[] args) throws FileNotFoundException
        {
            //Get scanner instance
            Scanner scan = new Scanner(new File("C:\\Personal_Info.csv"));

            //Set the delimiter used in file
            scanner.useDelimiter(",");

            //Get all tokens and store them in some data structure
            //I am just printing them on the screen
            while (scan.hasNext())
            {
                System.out.print(scan.next() + ",");
            }
              System.out.println("\n*************Process Complete*************");
            //Close the scanner 
            scan.close();
        }//End Main
    }//End Class
java csv
2个回答
3
投票

您可以逐行查找行中的特定关键字,以确定您需要执行的操作。对于当前示例,您可以使用关键字“* File”来了解何时创建要写入数据的新文件。只记得你想要关闭以前的BufferedWriter,如果它当前正在写入另一个文件。试试这个

  public static void main(String[] args) throws FileNotFoundException, IOException
  {
      Scanner scan = new Scanner(new File("C:\\Personal_Info.csv"));
      int fileNumber = 0;
      String csv = "CSV";
      BufferedWriter writer = null;

      while (scan.hasNextLine())
      {
          String line = scan.nextLine();
          if(line.contains("*File"))
          {
              fileNumber++;
              //check and make sure we close our previous writer
              if(writer != null)
                  writer.close();

              System.out.println("Creating a new file called: " + csv + fileNumber);
              writer = new BufferedWriter(new FileWriter("C:\\" + csv + fileNumber));
          }
          else if(writer != null)
          {
              writer.write(line + "\n");
          }
      }
      System.out.println("\n*************Process Complete*************");
      //Close the scanner 
      scan.close();
      if(writer != null)
          writer.close();
  }

0
投票

尝试使用正则表达式拆分输入文件并将每个匹配项写入新的输出文件,如下所示......

    Scanner sc = new Scanner(new File("C:\\Personal_Info.csv"));
    sc.useDelimiter("\\*File.*\n");

    int counter = 1;

    while (sc.hasNext()) {
        try( PrintWriter out = new PrintWriter( "CSV" + counter++ + ".txt")){
            out.println( sc.next() );
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.