如何将csv文件加载到包含多个空格的java中

时间:2018-04-11 20:05:34

标签: java csv text-files

想知道如何将csv文件加载到java中并打印出结果。到目前为止,我无法打印出整个csv表。工作表包含空格,看起来像这样:标题:

Sales num, Account num, Date, Delivery, Codes
Sales 1,    2345   ,     May17,  Oct318, 3345                                                                        
                                         4435
                                         2234
Sales 2,   3345,         May 18, Oct318, 4456

每次销售都有多个代码,但所有其他信息(帐号,数据,交付)只有一个。在代码之后第二次销售,因此在销售1和销售2之间有很多空白区域。

我找到了这个代码,但它只打印前两个单词。

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


  try {
   ArrayList < String > ar = new ArrayList < String > ();
   File csvFile = new File("C:\\Users\\AZ0000\\Documents\\Book1.csv\\");
   BufferedReader br = new BufferedReader(new FileReader(csvFile));
   String line = "";
   StringTokenizer st = null;
   int lineNumber = 0;
   int tokenNumber = 0;

   while ((line = br.readLine()) != null) {

    String[] arr = line.split(",");

    for (int i = 0; i < arr.length; i++) {
     //System.out.println(arr[0]+" " + arr[1] + arr); // h

    }

    lineNumber++;
    //use comma as token separator 

   }
  } catch (IOException ex) {

   ex.printStackTrace();

  }

我最终需要从csv中取出数据并将其导入文本文件中的某些行。

3 个答案:

答案 0 :(得分:1)

不确定为什么空格会成为一个问题,但请看一下jSefa

它允许您将对象序列化为CSV。

@CsvDataType()
public class Person {

   @CsvField(pos = 1)
   String name;

   @CsvField(pos = 2, format = "dd.MM.yyyy")
   Date birthDate;
}

答案 1 :(得分:1)

您应该使用正确的解析器,因为它更可靠。

univocity-parsers默认删除任何不需要的空格,比使用line.split(",");更快,并且会处理字段中的引号,行结尾和分隔符等内容。

试试这段代码:

CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();

CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new File("C:\\Users\\AZ0000\\Documents\\Book1.csv"));

希望它有所帮助。

免责声明:我是这个图书馆的作者。它是开源和免费的(Apache 2.0许可证)

答案 2 :(得分:0)

如果格式看起来像你的pase,那么它根本就不是csv ... 正确的格式应该像

Sales num, Account num, Date, Delivery, Codes
Sales 1,    2345   ,     May17,  Oct318, 3345                                                                        
Sales 1,    2345   ,     May17,  Oct318, 4435
Sales 1,    2345   ,     May17,  Oct318, 2234
Sales 2,   3345,         May 18, Oct318, 4456

或使用其他分隔符在一列中分割多个值,例如

Sales num, Account num, Date, Delivery, Codes
Sales 1,    2345   ,     May17,  Oct318, 3345;4435;2234
Sales 2,   3345,         May 18, Oct318, 4456

从我的观点来看,最好的方法是使文件像

Sales num,Account num,Date,Delivery,Codes
Sales 1,2345,May 17,Oct318,3345;4435;2234
Sales 2,3345,May 18,Oct318,4456

然后只需阅读行,按逗号,拆分,最后一列按;拆分