`
hwpok
  • 浏览: 250520 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 解析csv文件

阅读更多
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
@author panhf2003
 * 
@version 2008/09/05,
 
*/

public class CsvFileUtil
{
    
    
/**
     * 构造,禁止实例化
     
*/
    
private CsvFileUtil()
    {}
    
    
public static void main(String[] args)
    {
        
try
        {
            readCsvFile(
"d:\\ZD_CUSTOMER_VIEW.csv");
        }
        
catch (FileNotFoundException ex)
        {
            Logger.getLogger(CsvFileUtil.
class.getName()).log(Level.SEVERE,
                    
null, ex);
        }
        
catch (IOException ex)
        {
            Logger.getLogger(CsvFileUtil.
class.getName()).log(Level.SEVERE,
                    
null, ex);
        }
    }
    
    
/**
     * csv文件读取<BR/> 读取绝对路径为argPath的csv文件数据,并以List返回。
     * 
     * 
@param argPath
     *            csv文件绝对路径
     * 
@return csv文件数据(List<String[]>)
     * 
@throws FileNotFoundException
     * 
@throws IOException
     
*/
    
public static List<String[]> readCsvFile(String argPath)
            
throws FileNotFoundException, IOException
    {
        CsvFileUtil util 
= new CsvFileUtil();
        File cvsFile 
= new File(argPath);
        List
<String[]> list = new ArrayList<String[]>();
        FileReader fileReader 
= null;
        BufferedReader bufferedReader 
= null;
        
try
        {
            fileReader 
= new FileReader(cvsFile);
            bufferedReader 
= new BufferedReader(fileReader);
            String regExp 
= util.getRegExp();
            
            String strLine 
= "";
            String str 
= "";
            
while ((strLine = bufferedReader.readLine()) != null)
            {
                Pattern pattern 
= Pattern.compile(regExp);
                Matcher matcher 
= pattern.matcher(strLine);
                List
<String> listTemp = new ArrayList<String>();
                
while (matcher.find())
                {
                    str 
= matcher.group();
                    str 
= str.trim();
                    
if (str.endsWith(","))
                    {
                        str 
= str.substring(0, str.length() - 1);
                        str 
= str.trim();
                    }
                    
if (str.startsWith("\"") && str.endsWith("\""))
                    {
                        str 
= str.substring(1, str.length() - 1);
                        
if (util.isExisted("\"\"", str))
                        {
                            str 
= str.replaceAll("\"\"""\"");
                        }
                    }
                    
if (!"".equals(str))
                    {
                        System.out.print(str 
+ " ");
                        listTemp.add(str);
                    }
                }
                
// test
                System.out.println();
                list.add((String[]) listTemp
                        .toArray(
new String[listTemp.size()]));
            }
        }
        
catch (FileNotFoundException e)
        {
            
throw e;
        }
        
catch (IOException e)
        {
            
throw e;
        }
        
finally
        {
            
try
            {
                
if (bufferedReader != null)
                {
                    bufferedReader.close();
                }
                
if (fileReader != null)
                {
                    fileReader.close();
                }
            }
            
catch (IOException e)
            {
                
throw e;
            }
        }
        
return list;
    }
    
    
/**
     * csv文件做成<BR/> 将argList写入argPath路径下的argFileName文件里。
     * 
     * 
@param argList
     *            要写入csv文件的数据(List<String[]>)
     * 
@param argPath
     *            csv文件路径
     * 
@param argFileName
     *            csv文件名
     * 
@param isNewFile
     *            是否覆盖原有文件
     * 
@throws IOException
     * 
@throws Exception
     
*/
    
public static void writeCsvFile(List<String[]> argList, String argPath,
            String argFileName, 
boolean isNewFile) throws IOException,
            Exception
    {
        CsvFileUtil util 
= new CsvFileUtil();
        
// 数据check
        if (argList == null || argList.size() == 0)
        {
            
throw new Exception("没有数据");
        }
        
for (int i = 0; i < argList.size(); i++)
        {
            
if (!(argList.get(i) instanceof String[]))
            {
                
throw new Exception("数据格式不对");
            }
        }
        FileWriter fileWriter 
= null;
        BufferedWriter bufferedWriter 
= null;
        String strFullFileName 
= argPath;
        
if (strFullFileName.lastIndexOf("\\"== (strFullFileName.length() - 1))
        {
            strFullFileName 
+= argFileName;
        }
        
else
        {
            strFullFileName 
+= "\\" + argFileName;
        }
        File file 
= new File(strFullFileName);
        
// 文件路径check
        if (!file.getParentFile().exists())
        {
            file.getParentFile().mkdirs();
        }
        
try
        {
            
if (isNewFile)
            {
                
// 覆盖原有文件
                fileWriter = new FileWriter(file);
            }
            
else
            {
                
// 在原有文件上追加数据
                fileWriter = new FileWriter(file, true);
            }
            bufferedWriter 
= new BufferedWriter(fileWriter);
            
for (int i = 0; i < argList.size(); i++)
            {
                String[] strTemp 
= (String[]) argList.get(i);
                
for (int j = 0; j < strTemp.length; j++)
                {
                    
if (util.isExisted("\"", strTemp[j]))
                    {
                        strTemp[j] 
= strTemp[j].replaceAll("\"""\"\"");
                        bufferedWriter.write("\"" + strTemp[j] + "\"");
                    }
                    
else if (util.isExisted(",", strTemp[j])
                            
|| util.isExisted("\n", strTemp[j])
                            
|| util.isExisted(" ", strTemp[j])
                            
|| util.isExisted("??", strTemp[j]))
                    {
                        bufferedWriter.write(
"\"" + strTemp[j] + "\"");
                    }
                    
else
                    {
                        bufferedWriter.write(strTemp[j]);
                    }
                    
if (j < strTemp.length - 1)
                    {
                        bufferedWriter.write(
",");
                    }
                }
                bufferedWriter.newLine();
            }
        }
        
catch (IOException e)
        {
            e.printStackTrace();
        }
        
finally
        {
            
try
            {
                
if (bufferedWriter != null)
                {
                    bufferedWriter.close();
                }
                
if (fileWriter != null)
                {
                    fileWriter.close();
                }
            }
            
catch (IOException e)
            {
                
throw e;
            }
        }
    }
    
    
/**
     * 
@param argChar
     * 
@param argStr
     * 
@return
     
*/
    
private boolean isExisted(String argChar, String argStr)
    {
        
        
boolean blnReturnValue = false;
        
if ((argStr.indexOf(argChar) >= 0)
                
&& (argStr.indexOf(argChar) <= argStr.length()))
        {
            blnReturnValue 
= true;
        }
        
return blnReturnValue;
    }
    
    
/**
     * 正则表达式。
     * 
     * 
@return 匹配csv文件里最小单位的正则表达式。
     
*/
    
private String getRegExp()
    {
        StringBuffer strRegExps 
= new StringBuffer();
        strRegExps.append(
"\"((");
        strRegExps.append(SPECIAL_CHAR_A);
        strRegExps.append(
"*[,\\n  ])*(");
        strRegExps.append(SPECIAL_CHAR_A);
        strRegExps.append(
"*\"{2})*)*");
        strRegExps.append(SPECIAL_CHAR_A);
        strRegExps.append(
"*\"[  ]*,[  ]*");
        strRegExps.append("|");
        strRegExps.append(SPECIAL_CHAR_B);
        strRegExps.append(
"*[  ]*,[  ]*");
        strRegExps.append(
"|\"((");
        strRegExps.append(SPECIAL_CHAR_A);
        strRegExps.append(
"*[,\\n  ])*(");
        strRegExps.append(SPECIAL_CHAR_A);
        strRegExps.append(
"*\"{2})*)*");
        strRegExps.append(SPECIAL_CHAR_A);
        strRegExps.append(
"*\"[  ]*");
        strRegExps.append("|");
        strRegExps.append(SPECIAL_CHAR_B);
        strRegExps.append(
"*[  ]*");
        
return strRegExps.toString();
    }
    
    
private static final String SPECIAL_CHAR_A = "[^\",\\n  ]";
    
    
private static final String SPECIAL_CHAR_B = "[^\",\\n]";
}
分享到:
评论
1 楼 dubaopeng 2013-11-19  
挺好的,拿去改改!

相关推荐

    Java解析CSV文件

    本篇将详细介绍如何在Java中解析CSV文件,并以给定的"Java解析CSV文件"主题为例,结合提供的资源——`lucky_number_format.csv`、`javacsv-2.0.jar`和`CsvUtil.java`进行深入探讨。 首先,我们来看`javacsv-2.0.jar...

    java 解析csv文件例子,csv文件 中文乱码问题

    本篇文章将详细探讨如何在Java中解析CSV文件,并解决中文乱码的问题。 首先,我们需要了解如何使用Java的标准库`java.io`和`java.nio`来读取CSV文件。最常用的是使用`BufferedReader`配合`Scanner`或者`Files.lines...

    java操作csv文件(读、写)

    虽然csv文件能用Excel打开,但是csv文件没有像Excel一样有规定的电子表格形式,故使用POI无法解析csv文件,在网上找了一下,发现java有提供java csv文件来帮忙解析csv文件。  CSV是Comma Separated Values(逗号...

    文件上传,java解析excel和csv 转javabean

    本篇文章将深入讲解如何使用Java解析Excel(包括Excel 2003和2007格式)和CSV文件,并将解析的数据映射到Java Bean,以便后续的数据处理和存储。 首先,我们需要了解如何在Java中处理文件上传。在Servlet环境中,...

    csv文件解析工具(javacsv.jar包)

    这个包非常好,能处理特殊字符和换行符的问题,自己写的话很容易在特殊字符和换行符上出问题,建议用高人写的jar包。

    java读取csv文件示例分享(java解析csv文件)

    以下是一个简单的Java程序示例,演示如何读取并解析CSV文件。 首先,我们需要了解CSV文件的基本结构。CSV文件是由行和列组成的数据文件,每一行代表一个记录,列之间用逗号分隔。在这个例子中,我们有一个包含三列...

    javacsv_CsvReader:解析CSV文件

    `javacsv`库是处理CSV文件的一种工具,特别是`CsvReader`类,它提供了方便的方法来读取和解析这些文件。 `CsvReader`是`javacsv`库中的核心类,用于读取CSV文件并将其内容转换为Java对象。这个库由`csv`和`java`...

    [csvjdbc] Java解析csv文件的开源包及改动

    NULL 博文链接:https://woniu1983.iteye.com/blog/693251

    完整实现ftp上传与下载并解析csv文件

    Java中,可以使用OpenCSV或者Apache Commons CSV库来解析CSV文件。解析过程通常包括打开文件、创建解析器、迭代读取每一行,然后将每一行的数据转换为所需的数据结构,如列表或对象实例。 3. 多文件下载与并发处理...

    读取创建CSV文件并自动解析文件编码方式

    本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言进行示例,同时引入第三方库来辅助处理编码问题。 首先,创建CSV文件的基本过程涉及将数据写入具有特定分隔...

    csv解析 javacsv2.1解析csv文件的方法

    在Java中,处理CSV文件通常需要借助第三方库,如本案例中的`javacsv`库,版本2.1。这个库提供了一系列方法来帮助我们方便地解析和生成CSV数据。 `javacsv`库由Jonathan Leffler开发,它允许开发者通过简单的API读取...

    java使用javacsv读取csv文件 导入Mysql数据库

    这个过程涉及几个关键步骤,包括读取CSV文件、解析数据、建立与数据库的连接以及执行SQL插入语句。本篇文章将详细讲解如何使用javacsv库来实现这一功能。 首先,`javacsv`是一个轻量级的Java库,专门用于处理CSV...

    java 导出csv文件并上传sftp

    使用univocity-parsers,我们可以方便地将Java对象转换为CSV格式,或者从CSV文件中解析数据。以下是使用该库创建CSV文件的基本步骤: 1. 添加依赖:在你的项目中,你需要引入univocity-parsers的Maven或Gradle依赖...

    java对csv文件进行读写操作

    CSV(Comma Separated Values)文件是一种常见的数据存储格式,常用于数据...通过这些知识,你应该能轻松地完成读取、写入和解析CSV文件的任务。但记住,根据实际情况,可能需要进一步定制处理逻辑,以满足特定的需求。

    Java操作csv文件

    如果CSV文件包含特殊字符、逗号分隔的字段或者引用的字段(如`"Field, with comma"`),Apache Commons CSV库可以正确解析它们。例如,`CSVFormat`类允许你定义分隔符、引用字符、行结束符等。 6. **错误处理**: ...

    java 读写 csv 文件

    使用`CSVFormat`和`CSVParser`类来解析CSV文件。首先创建一个`CSVFormat`实例,设置分隔符、引用字符等参数,然后通过`Files.newBufferedReader()`读取文件内容,最后使用`CSVParser.parse()`方法解析文件。 ```...

    java实现导出csv文件并上传sftp

    本篇文章将深入探讨如何使用Java实现CSV文件的生成,并将其通过SFTP(Secure File Transfer Protocol)协议上传到指定服务器。 首先,我们要介绍的是用于生成CSV文件的库:univocity-parsers。这是一个高效、灵活且...

    JAVA 对CSV和Excel文件格式的读写

    利用Java swing 对csv和excel文件进行读写;并且可以同时读取5个文件的数量;通过关键字配置来读文件,还有就是通过POI CSVWriter等类的使用来对excel和csv等文件进行操作

Global site tag (gtag.js) - Google Analytics