<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢幻之旅

    DEBUG - 天道酬勤

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
    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]";
    }
    posted on 2008-12-17 09:31 HUIKK 閱讀(4183) 評論(5)  編輯  收藏

    評論

    # re: java 解析csv文件 2008-12-18 18:52 惠萬鵬
    去掉if (!"".equals(str)) 更合理些.  回復  更多評論
      

    # re: java 解析csv文件[未登錄] 2009-10-12 09:57 Hunter
    讀取CSV文件,遇到空字段就出錯了啊  回復  更多評論
      

    # re: java 解析csv文件 2012-08-09 20:08 poiu
    @惠萬鵬
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    @Hunter
    嗯 是的  回復  更多評論
      

    # re: java 解析csv文件[未登錄] 2012-08-09 20:45 H
    你是我同事huter嗎?  回復  更多評論
      

    # re: java 解析csv文件 2012-10-18 09:42 白云巖
    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]";


    這一大塊的正則表達式是什么意思,能詳細解釋一下嗎,謝謝。  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久亚洲精品国产精品黑人| 午夜一级毛片免费视频| 亚洲中文字幕无码一区| 亚洲AV无码国产剧情| 免费观看成人毛片a片2008| 亚洲国产人成在线观看| 91免费播放人人爽人人快乐| 亚洲综合图片小说区热久久| 五月亭亭免费高清在线| 国产v亚洲v天堂a无| 拨牐拨牐x8免费| 精品国产亚洲一区二区三区在线观看 | 免费在线看v网址| 国产精品高清视亚洲一区二区| 成人激情免费视频| 久久亚洲精品高潮综合色a片| 国产又长又粗又爽免费视频| 全部一级一级毛片免费看| 国产成人综合亚洲亚洲国产第一页 | 岛国岛国免费V片在线观看 | 亚洲国产综合无码一区| 久草免费手机视频| 亚洲日韩乱码久久久久久| xxxx日本免费| 久久亚洲AV成人无码国产最大| 一本久到久久亚洲综合| 久久国产精品免费一区| 久久久久亚洲AV成人无码网站| 在线视频观看免费视频18| 亚洲中文字幕精品久久| 中国china体内裑精亚洲日本| 久久精品国产亚洲AV无码偷窥| 亚洲 自拍 另类小说综合图区| 成人免费福利视频| 最新国产AV无码专区亚洲| APP在线免费观看视频| 亚洲欧洲日产国码二区首页| 欧美a级成人网站免费| 人妻仑乱A级毛片免费看| 亚洲图片一区二区| 四虎成人免费大片在线|