java读取csv存入list_Java读取CSV文件为List

java读取csv存入list_Java读取CSV文件为List1packagetest;23importlombok.extern.slf4j.Slf4j;45importjava.io.BufferedReader;6importjava.io.FileInputStream;7importjava.io.IOException;8importjava.io.InputStreamReader;9importjava.util.ArrayLi…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1 packagetest;2

3 importlombok.extern.slf4j.Slf4j;4

5 importjava.io.BufferedReader;6 importjava.io.FileInputStream;7 importjava.io.IOException;8 importjava.io.InputStreamReader;9 importjava.util.ArrayList;10 importjava.util.HashMap;11 importjava.util.List;12 importjava.util.Map;13

14 @Slf4j15 public classCSVFileUtil {16 /**

17 * CSV文件编码18 */

19 private static final String ENCODE = “UTF-8”;20

21 /**

22 * 读取CSV文件得到List,默认使用UTF-8编码23 *@paramfileName 文件路径24 *@return

25 */

26 public static ListgetLines(String fileName) {27 returngetLines(fileName, ENCODE);28 }29

30 /**

31 * 读取CSV文件得到List32 *@paramfileName 文件路径33 *@paramencode 编码34 *@return

35 */

36 public static ListgetLines(String fileName, String encode) {37 List lines = new ArrayList();38 BufferedReader br = null;39 InputStreamReader isr = null;40 FileInputStream fis = null;41 try{42 fis = newFileInputStream(fileName);43 isr = newInputStreamReader(fis, encode);44 br = newBufferedReader(isr);45 String line;46 while ((line = br.readLine()) != null) {47 StringBuilder sb = newStringBuilder();48 sb.append(line);49 boolean readNext = countChar(sb.toString(), ‘”‘, 0) % 2 == 1;50 //如果双引号是奇数的时候继续读取。考虑有换行的是情况

51 while(readNext) {52 line =br.readLine();53 if (line == null) {54 return null;55 }56 sb.append(line);57 readNext = countChar(sb.toString(), ‘”‘, 0) % 2 == 1;58 }59 lines.add(sb.toString());60 }61 } catch(Exception e) {62 log.error(“Read CSV file failure :{}”, e);63 } finally{64 try{65 if (br != null) {66 br.close();67 }68 if (isr != null) {69 isr.close();70 }71 if (fis != null) {72 fis.close();73 }74 } catch(IOException e) {75 log.error(“Close stream failure :{}”, e);76 }77 }78 returnlines;79 }80

81 public staticString[] fromCSVLine(String source) {82 return fromCSVLine(source, 0);83 }84

85 /**

86 * 把CSV文件的一行转换成字符串数组。指定数组长度,不够长度的部分设置为null87 *@paramsource88 *@paramsize89 *@return

90 */

91 public static String[] fromCSVLine(String source, intsize) {92 List list =fromCSVLineToArray(source);93 if (size

101 public staticList fromCSVLineToArray(String source) {102 if (source == null || source.length() == 0) {103 return newArrayList();104 }105 int currentPosition = 0;106 int maxPosition =source.length();107 int nextComa = 0;108 List list = newArrayList();109 while (currentPosition

120 /**

121 * 把字符串类型的数组转换成一个CSV行。(输出CSV文件的时候用)122 *123 *@paramarr124 *@return

125 */

126 public staticString toCSVLine(String[] arr) {127 if (arr == null) {128 return “”;129 }130 StringBuilder sb = newStringBuilder();131 for (int i = 0; i < arr.length; i++) {132 String item =addQuote(arr[i]);133 sb.append(item);134 if (arr.length – 1 !=i) {135 sb.append(“,”);136 }137 }138 returnsb.toString();139 }140

141 /**

142 * 将list的第一行作为Map的key,下面的列作为Map的value143 *@paramlist144 *@return

145 */

146 public static List> parseList(Listlist) {147 List> resultList = new ArrayList>();148 String firstLine = list.get(0);149 String[] fields = firstLine.split(“,”);150 for (int i = 1; i < list.size(); i++) {151 String valueLine =list.get(i);152 String[] valueItems =CSVFileUtil.fromCSVLine(valueLine);153 Map map = new HashMap();154 for (int j = 0; j < fields.length; j++) {155 map.put(fields[j], valueItems[j]);156 }157 resultList.add(map);158 }159 returnresultList;160 }161

162 /**

163 * 字符串类型的List转换成一个CSV行。(输出CSV文件的时候用)164 *165 *@paramstrArrList166 *@return

167 */

168 public staticString toCSVLine(ArrayList strArrList) {169 if (strArrList == null) {170 return “”;171 }172 String[] strArray = newString[strArrList.size()];173 for (int idx = 0; idx < strArrList.size(); idx++) {174 strArray[idx] =(String) strArrList.get(idx);175 }176 returntoCSVLine(strArray);177 }178

179 /**

180 * 计算指定字符的个数181 *182 *@paramstr 文字列183 *@paramc 字符184 *@paramstart 开始位置185 *@return个数186 */

187 private static int countChar(String str, char c, intstart) {188 int index =str.indexOf(c, start);189 return index == -1 ? 0 : countChar(str, c, index + 1) + 1;190 }191

192 /**

193 * 查询下一个逗号的位置。194 *195 *@paramsource 文字列196 *@paramst 检索开始位置197 *@return下一个逗号的位置。198 */

199 private static int nextComma(String source, intst) {200 int maxPosition =source.length();201 boolean inquote = false;202 while (st

214 /**

215 * 取得下一个字符串216 *217 *@paramsource218 *@paramst219 *@paramnextComma220 *@return

221 */

222 private static String nextToken(String source, int st, intnextComma) {223 StringBuilder strb = newStringBuilder();224 int next =st;225 while (next

239 /**

240 * 在字符串的外侧加双引号。如果该字符串的内部有双引号的话,把”转换成””。241 *242 *@paramitem 字符串243 *@return处理过的字符串244 */

245 private staticString addQuote(String item) {246 if (item == null || item.length() == 0) {247 return “\”\””;248 }249 StringBuilder sb = newStringBuilder();250 sb.append(‘”‘);251 for (int idx = 0; idx < item.length(); idx++) {252 char ch =item.charAt(idx);253 if (‘”‘ ==ch) {254 sb.append(“\”\””);255 } else{256 sb.append(ch);257 }258 }259 sb.append(‘”‘);260 returnsb.toString();261 }262 }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220326.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python求一元二次方程解「建议收藏」

    Python求一元二次方程解「建议收藏」题目:请定义一个函数’quadratic(a,b,c)‘,接收三个参数,返回一元二次方程:ax²+bx+c=0的两个解。(提示:计算平方根可以调用math.sqrt()函

    2022年7月6日
    30
  • mysql之模糊查询的方法

    mysql之模糊查询的方法想起Mysql模糊查询正常情况下我们想到的一般都是like,但是使用like,格式正确了效率很快,当然这是在数据量比较小的情况下,问题是在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时mysql查询的效率是很关键的,也是很重要的。一、一般情况下like模糊查询的写法:这个SQL语句,如果用explain解释的话,我们很容易就能发觉它是没有走索引搜索,而是对…

    2022年5月30日
    53
  • ip addr del 操作ip时的注意事项[通俗易懂]

    ip addr del 操作ip时的注意事项[通俗易懂]在高可用,多线路及系统维护的特殊情况下,我们通常会通过”ipaddr”这一命令来添加一个隐形IP在相应的设备上,但是当我们在一个设备上添加多个ip的时候,删除某个IP的时候尤其要注意,下面通过几个实例来说明,如下:root@localhost~]#ipaddradd10.1.1.230/24deveth0[root@localhost~]#ipaddradd1…

    2022年7月27日
    16
  • HTML添加背景图片_html背景图片铺满网页

    HTML添加背景图片_html背景图片铺满网页2020-04-27 每日一例第43天1.后台代码<html><center><head>0420html中div的用法</head>

    2022年8月4日
    6
  • Java 拦截器

    Java 拦截器一、引言  既然要用拦截器,首先先得简单了解一下什么是拦截器:  概念:java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。  作用域:动态拦截Action调用的对象(也就是我们的controller层)  我们日常开发中,经常会遇到这个场景:在访问系统功能前,需要用户登录,不登陆的话无法使用我们的系统,那么如果在每个方法

    2022年6月9日
    241
  • 单应性矩阵的理解及求解3「建议收藏」

    http://www.sohu.com/a/223594989_100007727前面文章《从零开始学习「张氏相机标定法」(一)成像几何模型》中我们已经得到了像素坐标系和世界坐标系下的坐标映射关系:其中,u、v表示像素坐标系中的坐标,s表示尺度因子,fx、fy、u0、v0、γ(由于制造误差产生的两个坐标轴偏斜参数,通常很小)表示5个相机内参,R,t表示相机外参,Xw、Yw、Zw(假设标…

    2022年4月18日
    93

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号