废话不多说,直接上代码
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jumpmind.symmetric.csv.CsvReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.nio.charset.Charset;
public class CsvToXlsxUtil {
private static final Logger log = LoggerFactory.getLogger(CsvToXlsxUtil.class);
private static final char[] DELIMITERS = {
',',
';',
'\001',
' ',
'\t',
'|',
'#',
'&'
};
public static void main(String[] args) {
String csvFile = "D:/temp/cy/cy_3.csv";
System.out.println(csvToXLSX(csvFile));
}
public static String csvToXLSX(String csvFileAddress) {
return csvToXLSX(csvFileAddress,"GBK");
}
public static String csvToXLSX(String csvFileAddress,String charset) {
String xlsxFileAddress = "";
FileOutputStream fileOutputStream = null;
try {
char delimiter = getDelimiter(csvFileAddress);
xlsxFileAddress = csvFileAddress.split("\\.")[0]+".xls";
XSSFWorkbook workBook = new XSSFWorkbook();
XSSFSheet sheet = workBook.createSheet(getSheetName(csvFileAddress));
int RowNum=-1;
CsvReader csvReader = new CsvReader(csvFileAddress, delimiter, Charset.forName(charset));
while (csvReader.readRecord()){
RowNum++;
XSSFRow currentRow=sheet.createRow(RowNum);
for(int i=0;i<csvReader.getColumnCount();i++){
currentRow.createCell(i).setCellValue(csvReader.get(i));
}
}
fileOutputStream = new FileOutputStream(xlsxFileAddress);
workBook.write(fileOutputStream);
return getFileName(xlsxFileAddress);
} catch (Exception e) {
log.error("CsvToXlsxUtil exception :" , e);
}finally {
try {
fileOutputStream.close();
} catch (IOException e) {
log.error("CsvToXlsxUtil close FileOutputStream exception :" , e);
}
}
return getFileName(xlsxFileAddress);
}
private static String getSheetName(String path){
try {
String[] file = getFileName(path).split("\\.");
return file[0];
}catch (Exception e){
log.error("CsvToXlsxUtil get sheet name exception : ",e);
return "Sheet";
}
}
private static String getFileName(String path){
String[] paths = path.contains("\\")?path.split("\\\\"):path.split("/");
return paths[paths.length-1];
}
private static char getDelimiter(String path){
BufferedReader br = null;
char delimiter = ',';
try {
br = new BufferedReader(new FileReader(path));
String line = br.readLine();
CsvReader csvReader;
int columCount = 0;
for (char delimiterTest : DELIMITERS){
csvReader = new CsvReader(getStringStream(line),delimiterTest,Charset.forName("UTF-8"));
if(csvReader.readRecord()){
int newColumnCount = csvReader.getColumnCount();
if(newColumnCount>columCount){
columCount = newColumnCount;
delimiter = delimiterTest;
}
}
}
} catch (Exception e) {
log.error("CsvToXlsxUtil get delimiter exception :",e);
}finally {
try {
br.close();
} catch (IOException e) {
log.error("CsvToXlsxUtil get delimiter close BufferedReader exception :",e);
}
}
return delimiter;
}
private static InputStream getStringStream(String sInputString){
if (sInputString != null && !sInputString.equals("")){
try{
ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(sInputString.getBytes());
return tInputStringStream;
}catch (Exception e){
log.error("CsvToXlsxUtil get StringStream exception :",e);
}
}
return null;
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步