【问题标题】:How come my csv-file isnt being read all the way?为什么我的 csv 文件没有被一路读取?
【发布时间】:2014-03-02 22:40:32
【问题描述】:

所以一般的想法是我使用以下代码读取 csv 文件:

 try{
            Scanner sc = new Scanner (new File(path));
            sc.useDelimiter(";");
            while (sc.hasNext()){
                String lijn = sc.nextLine();
                System.out.println(lijn);
            }

        }catch (FileNotFoundException fnfe){
            System.out.println(path);
            System.out.println("definition.csv not found");
        }

一切都很顺利,直到我到达第 82 行时它才停止读取,即使还剩下一千多行并且文件本身似乎没有任何内容表明标点符号发生了变化。

文件

province;red;green;blue;x;x
1;42;3;128;Vestisland;x
2;84;6;1;Austisland;x
3;126;9;129;Tyrconnell;x
4;168;12;2;Tyrone;x
5;0;15;130;Ulster;x
6;168;45;177;Blekinge;x
7;84;21;131;Oriel;x
8;126;24;4;Breifne;x
9;168;27;132;Connacht;x
10;0;30;5;Kildare;x
11;42;33;133;Dublin;x
12;84;36;6;Ossory;x
13;126;39;134;Thomond;x
14;168;42;7;Desmond;x
15;0;45;135;Ormond;x
16;42;48;8;Leinster;x
17;84;51;136;Hereford;x
18;126;54;9;Dyfed;x
19;168;57;137;Glamorgan;x
20;0;60;10;Gwent;x
21;42;63;138;Gloucester;x
22;84;66;11;Oxford;x
23;126;69;139;Wiltshire;x #Salisbury
24;168;72;12;Surrey;x
25;0;75;140;Sussex;x
26;42;78;13;Winchester;x
27;126;84;14;Dorset;x
28;84;81;141;Somerset;x
29;168;87;142;Devon;x
30;0;90;15;Worcester;x
31;42;93;143;Cornwall;x
32;84;96;16;Middlesex;x
33;126;99;144;Faereyar;x
34;168;102;17;Shetland;x
35;0;105;145;Innse Gall;x
36;42;108;18;Orkney;x
37;84;111;146;Caithness;x
38;126;114;19;Teviotdale;x
39;168;117;147;Ross;x
40;0;120;20;Moray;x
41;42;123;148;Buchan;x
42;84;126;21;Strathearn;x
43;126;129;149;Gowrie;x
44;168;132;22;Atholl;x
45;0;135;150;Argyll;x
46;42;138;23;Fife;x
47;84;141;151;Clydesdale;x #Strathclyde
48;126;144;24;Lothian;x
49;168;147;152;Carrick;x
50;0;150;25;Galloway;x
51;42;153;153;Dunbar;x
52;84;156;26;Northumberland;x
53;126;159;154;Cumberland;x
54;168;162;27;Isle of Man;x
55;0;165;155;Westmorland;x
56;42;168;28;Durham;x
57;84;171;156;York;x
58;126;174;29;Lancaster;x
59;168;177;157;Chester;x
60;0;180;30;Perfeddwlad;x
61;42;183;158;Lincoln;x
62;84;186;31;Leicester;x
63;126;189;159;Derby;x
64;168;192;32;Gwynedd;x
65;0;195;160;Powys;x
66;42;198;33;Shrewsbury;x
67;84;201;161;Warwick;x
68;126;204;34;Northampton;x
69;168;207;162;Bedford;x
70;0;210;35;Norfolk;x
71;42;0;163;Suffolk;x
72;84;3;36;Essex;x
73;126;6;164;Kent;x
74;168;9;37;Guines;x
75;0;12;165;Boulogne;x
76;42;15;38;Yperen;x
77;84;18;166;Artois;x
78;126;21;39;Brugge;x
79;168;24;167;Zeeland;x
80;0;27;40;Holland;x
81;42;30;168;Westfriesland;x
82;84;33;41;Sticht;x
83;126;36;169;Gelre;x

编辑:链接到 csv 文件 https://mega.co.nz/#!vhJHWJBR!VC2ib4FlLbCxlDaMFhM-bocAcJISJTW_lxoXRBkYJUE

【问题讨论】:

  • 这是 CSV;那你为什么不使用 OpenCSV 之类的库来阅读它呢?
  • 它到底停在哪一行?它包含什么?
  • @ fge 因为我是 csv 的菜鸟,我认为我的方法是最简单的。我从未听说过 OpenCSV
  • @jsalonen 第 82 行,如 OP 中所述。 csv 文件中的行以行号开头。
  • 所以只是文件本身有问题,而不是我的代码?

标签: java csv java.util.scanner


【解决方案1】:

下面这行似乎有问题:

   while (sc.hasNext()){
        String lijn = sc.nextLine();
        System.out.println(lijn);
   }

尝试将其更改为:

   while (sc.hasNext()){
        String lijn = sc.next();
        System.out.println(lijn);
   }

请注意,此代码现在应该在不同的行上打印每个 ;-delimited 字段,这可能是也可能不是您最初尝试做的事情,但我假设您的实际意图是将 CSV 存储在内存中以某种形式,这应该会有所帮助。

【讨论】:

  • @BURNS,刚刚编辑了我的答案。如果上面的更改也不起作用,那么我认为您可能希望将文件上传到某个地方,以便我们可以看到原始文件。很难猜测发生了什么,因为有时在粘贴到 SO 时会丢失不可见的字符。
猜你喜欢
  • 2023-01-08
  • 1970-01-01
  • 2021-02-18
  • 2013-02-28
  • 2015-08-08
  • 2012-09-24
  • 2019-09-28
  • 2017-07-21
  • 1970-01-01
相关资源
最近更新 更多