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 }

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题[通俗易懂]

    设置虚拟机桥接模式以及解决桥接模式上不了网以及ping不通主机的问题[通俗易懂]一.VMware设置桥接模式1.VMware-&gt;编辑-&gt;虚拟网络编辑器-&gt;更改设置选择VMnet0(桥接模式),选择与主机同名网卡 ,主机可在在网络中心查看网卡名称2.设置桥接模式 选择桥接模式 二.解决上不了网的问题0、在vmware虚拟机中:vmnet0对应桥接模式;vmnet1对应NAT模式;vmnet8对应仅主机模式。安…

  • apache rewritecond_hfile数据格式中的data字段用于

    apache rewritecond_hfile数据格式中的data字段用于RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。复制代码代码如下:RewriteEngineonRewriteCond %{HTTP_USER_AGENT} ^Mozilla//5/.0.*

  • 深度剖析原理!java培训网课代理[通俗易懂]

    深度剖析原理!java培训网课代理[通俗易懂]前言想必很多人在为接下来的金九银十做准备,或许你只是想找到一份工作,亦或许你希望通过今年最后这波拿到一个理想的工作和薪酬。不管是哪一种情况,你都需要提前做好准备,而不是临时抱佛脚。LZ为大家分享的这些面试真题一定要基于自己的技术栈来思考,而不是背一下就觉得这个我会了。试想一下,如果面试官接着往深处问,你能保证自己回答的上来吗?这样的跳槽方式在以前或许还比较适用,但是在今年一定是没有效果的,没有意义的。LZ把这350道Java面试真题分成了五大专题,分别是:性能优化、微服务架构、并发编程(高级)、开源框

  • Linux系统下安装jdk及环境配置(两种方法)

    Linux系统下安装jdk及环境配置(两种方法)这里介绍两种linux环境下jdk的安装以及环境配置方法在windows系统安装jdk以及环境配置,相信大家都会,这里就不做赘述了,这里主要讲讲linux下的jdk安装以及环境配置。第一种属于傻瓜式安装,一键安装即可(yum安装);第二种手动安装,需要自己去Oracle官网下载需要的jdk版本,然后解压并配置环境,整个过程其实很简单。一、yum一键安装这种办法简单粗暴,就像盖伦丢技能…

  • python测试系列教程——python+Selenium+chrome自动化测试框架[通俗易懂]

    python测试系列教程——python+Selenium+chrome自动化测试框架[通俗易懂]全栈工程师开发手册(作者:栾鹏)python教程全解需要的环境浏览器(Firefox/Chrome/IE..)PythonSeleniumSeleniumIDE(如果用Firefox)FireBug、FirePath(如果用Firefox)chromedriver、IEDriverServer、phantomjs.exeIDE(Pycharm/Subl…

  • pycharm更改环境_pycharm配置环境变量

    pycharm更改环境_pycharm配置环境变量我们在使用pycharm创建项目的时候我们可以直接选择创建项目在什么环境之上。但是大多时候我们都是直接在别人的工作上进行二次开发,所以这时候就涉及直接打开代码,这就需要我们自行调整Python环境0.准备工作1.你需要有Python环境,我这里使用的是anaconda配置的虚拟环境1.代码提示和动态解析的设置这一步决定你写代码的时候是不是会报错,是不是能给出代码提示。首先我们直接File–》Settings直接熟练的打开设置:之后我们直接按照下图,找到调整环境的位置按照你的实际情况,选

发表回复

您的电子邮箱地址不会被公开。

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