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

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

在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;    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5506370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存