栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java中将csv转换为xls时出现问题?只需核心Java经验-与导入无关的问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java中将csv转换为xls时出现问题?只需核心Java经验-与导入无关的问题

设法回答了我自己的问题。经过一些搜索,我设法在这里找到了这个小pdf:

http://www.objectmentor.com/resources/articles/tfd.pdf

从那里,我设法采用了第35页上的代码来与我的程序一起使用。所有功劳归于

Jeff Langr, 2001
。我所做的就是使其与Java当前的某些标准兼容。

这是将来可能会遇到此问题的所有人员的代码。

import java.io.BufferedReader;import java.io.IOException;import java.util.ArrayList;public class CSVReader {    private BufferedReader reader;    private String line;    private static final String DOUBLE_QUOTE = """;    private static final String COMMENT_SYMBOL = "#";    private static final char stateINIT = 'S';    private static final char stateCOMMENT = '#';    private static final char stateQUOTED_DATA = 'q';    private static final char stateQUOTE_IN_QUOTED_DATA = 'Q';    private static final char stateDATA = 'D';    private static final char stateNEW_TOKEN = 'N';    private static final char stateWHITESPACE = 'W';    public CSVReader(String filename) throws IOException {        reader = new BufferedReader(new java.io.FileReader(filename));        loadNextNonCommentLine();    }    public ArrayList<String> next() throws IOException {        if (line == null) throw new IOException("Read past end of file");        ArrayList<String> columns = columnsFromCSVRecord(line);        loadNextNonCommentLine();        return columns;    }    public boolean hasNext() {        return line != null;    }    void loadNextNonCommentLine() throws IOException {        do line = reader.readLine();        while (line != null && line.startsWith(COMMENT_SYMBOL));        if (line == null) reader.close();    }    public ArrayList<String> columnsFromCSVRecord(String line) throws IOException {        char state = stateINIT;        char ch;        int i = 0;        ArrayList<String> tokens = new ArrayList<String>();        StringBuffer buffer = new StringBuffer();        char[] charArray = line.toCharArray();        while (i < charArray.length) { ch = charArray[i++]; switch (state) { case stateINIT:     switch (ch) {     case '"':         buffer.append(ch);         state = stateQUOTED_DATA;         break;     case ',':         state = stateNEW_TOKEN;         tokens.add(clean(buffer));         buffer = new StringBuffer();         break;     case 't':     case ' ':         break;     case '#':         state = stateCOMMENT;         break;     default:         state = stateDATA;         buffer.append(ch);         break;     }     break; case stateCOMMENT:     break; case stateQUOTED_data:     switch (ch) {     case '"':         buffer.append(ch);         state = stateQUOTE_IN_QUOTED_DATA;         break;     default:         buffer.append(ch);         break;     }     break; case stateQUOTE_IN_QUOTED_data:     switch (ch) {     case '"':         state = stateQUOTED_DATA;         break;     case ',':         state = stateNEW_TOKEN;         tokens.add(clean(buffer));         buffer = new StringBuffer();         break;     case ' ':     case 't':         break;     case '#':         tokens.add(clean(buffer));         state = stateCOMMENT;         break;     default:         throw new IOException("badly formed CSV record:" + line);     }     break; case statedata:     switch (ch) {     case '#':         tokens.add(clean(buffer));         state = stateCOMMENT;         break;     case ',':         state = stateNEW_TOKEN;         tokens.add(clean(buffer));         buffer = new StringBuffer();         break;     default:         buffer.append(ch);         break;     }     break; case stateNEW_TOKEN:     switch (ch) {     case '#':         tokens.add(clean(buffer));         state = stateCOMMENT;         break;     case ',':         tokens.add(clean(buffer));         buffer = new StringBuffer();         break;     case ' ':     case 't':         state = stateWHITESPACE;         break;     case '"':         buffer.append(ch);         state = stateQUOTED_DATA;         break;     default:         state = stateDATA;         buffer.append(ch);         break;     }     break; case stateWHITESPACE:     switch (ch) {     case '#':         state = stateCOMMENT;         break;     case ',':         state = stateNEW_TOKEN;         // ACCEPT NEW EMPTY COLUMN HERE??         break;     case '"':         buffer.append(ch);         state = stateQUOTED_DATA;         break;     case ' ':     case 't':         break;     default:         state = stateDATA;         buffer.append(ch);         break;     }     break; default:     break; }        }        if (state == stateQUOTED_DATA) throw new IOException("Unmatched quotes in line:n" + line);        if (state != stateCOMMENT) tokens.add(clean(buffer));        return tokens;    }    public String clean(StringBuffer buffer) {        String string = buffer.toString().trim();        if (string.startsWith(DOUBLE_QUOTE)) return string.substring(1, string.length() - 1);        return string;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515310.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号