java对操作csv文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java对操作csv文件相关的知识,希望对你有一定的参考价值。

怎么用java对csv中一列数据去重并排序,其他列随之变化,求解!

参考技术A java">importjava.io.BufferedReader;importjava.io.FileReader;publicclassTestpublicvoidtest(introw,intcol)tryBufferedReaderreader=newBufferedReader(newFileReader("C:\\a.csv"));//换成你的文件名//reader.readLine();//第一行信息,为标题信息,不用,如果需要,注释掉Stringline=null;intindex=0;while((line=reader.readLine())!=null)Stringitem[]=line.split("");//CSV格式文件为逗号分隔符文件,这里根据逗号切分if(index==row-1)if(item.length>=col-1)Stringlast=item[col-1];//这就是你要的数据了System.out.println(last);//intvalue=Integer.parseInt(last);//如果是数值,可以转化为数值index++;catch(Exceptione)e.printStackTrace();/***@paramargs*/publicstaticvoidmain(String[]args)Testtest=newTest();test.test(3,2);你的数据格式有问题,空格的个数不确定,没法每行用空格分隔。以下是我调整后的数据格式每行的数据以一个空格分隔,test方法传入的参数一次是,行,列:1电机12WBS23PID34CP5社供出6原価実绩7社供WC8外注费9直材费10自家制品11直経费12その他13注残14注残

Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)

日期:2020.01.16

博客期:125

星期四

  

    我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式:  

技术图片
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beangroup>
3     <javabean>
4         <data name=‘code‘>A001</data>
5         <data name=‘name‘>张三</data>
6     </javabean>
7 </beangroup>
XML文件类型
技术图片
{
  list:[
        {
          code:"A001",
          name:"张三"    
        }
    ]  
}
JSON文件类型
技术图片
code,name
A001,张三
CSV文件类型

【此处预留给未来添加的文件类型】

 

    我所需要的基本功能是对表型数据的读写,这一点对于CSV这一种标准表形式的文件来说,构造它轻而易举,也没什么难度!而对于JSON和XML来说很难,其实JSON和XML是可以相互转换的,或者说这二者可以等价,毕竟JSON对应属性和XML对应标签属性如出一辙!而XML的标签内部内容刚好对应JSON里的具体内容!

    好了话不多说,赶紧加代码:

  com.filedeal包:

技术图片
 1 package com.filedeal;
 2 
 3 import java.io.File;
 4 
 5 import com.dblink.bean.BeanGroup;
 6 
 7 public interface FileControler {
 8     //---[set、get方法]
 9     //设置文件信息
10     void setFile(File file);
11     //获取处理的文件信息
12     File getFile();
13     //---[类与对象方法]
14     //释放
15     void free();
16     //重新设置
17     void reset();
18     //表型数据植入
19     public void setUnderprinted(BeanGroup bg);
20     //表型数据获取
21     public BeanGroup getUnderprinted();
22 }
FileControler.java
技术图片
 1 package com.filedeal;
 2 
 3 import com.dblink.bean.BeanGroup;
 4 import com.dblink.bean.JavaBean;
 5 import com.filedeal.csv.CSVFileDealer;
 6 
 7 public class FileControlerTest {
 8     public static void main(String[] args) {
 9         BeanGroup bg = new BeanGroup();
10         JavaBean jb1 = new JavaBean();
11         jb1.add("序号");
12         jb1.add("名称");
13         jb1.add("性别");
14         JavaBean jb2 = new JavaBean();
15         jb2.add(1);
16         jb2.add("张三");
17         jb2.add("男");
18         JavaBean jb3 = new JavaBean();
19         jb3.add(2);
20         jb3.add("李四");
21         jb3.add("女");
22         bg.add(jb1);
23         bg.add(jb2);
24         bg.add(jb3);
25         CSVFileDealer csv = new CSVFileDealer("src/testFiles/art.csv");
26         csv.setUnderprinted(bg);
27         csv.free();
28     }
29 }
FileControlerTest.java

  com.filedeal.csv包:

技术图片
  1 package com.filedeal.csv;
  2 
  3 import java.io.BufferedWriter;
  4 import java.io.File;
  5 import java.io.FileNotFoundException;
  6 import java.io.FileOutputStream;
  7 import java.io.IOException;
  8 import java.io.OutputStreamWriter;
  9 import java.io.PrintWriter;
 10 import java.io.UnsupportedEncodingException;
 11 import java.util.Scanner;
 12 
 13 import com.dblink.bean.BeanGroup;
 14 import com.dblink.bean.JavaBean;
 15 import com.filedeal.FileControler;
 16 
 17 public class CSVFileDealer implements FileControler {
 18     protected File file; 
 19     @Override
 20     public void setFile(File file) {
 21         this.file = file;
 22     }
 23     @Override
 24     public File getFile() {
 25         return file;
 26     }
 27     @Override
 28     public void free() {
 29         // Do Nothing ...
 30     }
 31     @Override
 32     public void reset() {
 33         String name = this.file.getName();
 34         this.free();
 35         this.file = new File(name);
 36     }
 37     //---[数据处理]
 38     //设置数据集合
 39     @Override
 40     public void setUnderprinted(BeanGroup bg) {
 41         try {
 42             if(!file.exists())
 43                 return;
 44             PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"GB2312")));
 45             int leng = bg.size();
 46 
 47             for(int i=0;i<leng;++i)
 48             {
 49                 JavaBean jb = bg.get(i);
 50                 String str = "";
 51 
 52                 int leng_s = jb.size();
 53 
 54                 for(int j=0;j<leng_s;++j)
 55                 {
 56                     String tmp = jb.get(j).toString();
 57                     if(j==0)
 58                         str += tmp;
 59                     else
 60                         str += ","+tmp;
 61                 }
 62 
 63                 pw.println(str);
 64             }
 65 
 66             pw.close();
 67         } catch (FileNotFoundException e) {
 68             e.printStackTrace();
 69         } catch (UnsupportedEncodingException e) {
 70             e.printStackTrace();
 71         }
 72     }
 73     //获取数据集合
 74     @Override
 75     public BeanGroup getUnderprinted(){
 76         BeanGroup bg = new BeanGroup();
 77         try {
 78             if(!this.file.exists())
 79                 return bg;
 80             Scanner sc = new Scanner(this.file);
 81             while(sc.hasNextLine())
 82             {
 83                 String str = sc.nextLine();
 84                 String [] sg = str.split(",");
 85     
 86                 JavaBean jb = new JavaBean();
 87     
 88                 int leng = sg.length;
 89     
 90                 for(int i=0;i<leng;++i)
 91                 {
 92                     String tmp = sg[i];
 93                     jb.add(tmp);
 94                 }
 95     
 96                 bg.add(jb);
 97             }
 98             sc.close();
 99         } catch (FileNotFoundException e) {
100             e.printStackTrace();
101         }
102         return bg;
103     }
104     //---[构造方法]
105     public CSVFileDealer(String filePath){
106         super();
107         this.file = new File(filePath);
108         if(!this.file.exists())
109         {
110             try {
111                 this.file.createNewFile();
112             } catch (IOException e) {
113                 e.printStackTrace();
114             }
115         }
116     }
117     public CSVFileDealer(File file){
118         super();
119         this.file = file;
120         if(!this.file.exists())
121         {
122             try {
123                 this.file.createNewFile();
124             } catch (IOException e) {
125                 e.printStackTrace();
126             }
127         }
128     }
129 }
CSVFileDealer.java

 

 

【此处预留给未来添加的文件类型】

 

    实现类图:

      类图博主正在快马加鞭的绘制... ...

    所用设计模式:

  1、策略模式:我发现这个模式真好用,而且简单,而且好用,嗯!针对文件处理不同的文件类型采取不一样的策略

  2、模板方法模式:文件的读写操作算是基本的模板方法!

  3、代理模式:嗯~要想json和xml的数据源完成读写事先需要调用ReadableTable类的方法进行数据整理,这一部分方法被封装在代理类里面,也可以不做数据处理,这正是代理模式的初衷!

    

以上是关于java对操作csv文件的主要内容,如果未能解决你的问题,请参考以下文章

java操作csv文件

JAVA中如何使用创建CSV文件

Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)

java 对CSV 文件的读取与生成

python对csv文件的读写操作

java 读取csv发送 foxmail