javacsv文件
⑴ java操作csv文件
cvs格式实际上就是字符串,直接通过英文”,“来进行的间隔显示,所以直接写入的时候直接在流中添加英文标点逗号即可。
实现思路:就是将需要保留的内容写入另外一个cvs文件中在满足条件处进行增加、删除、修改操作。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
OutputStreamWriter pw = null;//定义一个流
try {
String file = "D:/test/test.xml";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
pw = new OutputStreamWriter(new FileOutputStream(“D:/New.cvs”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.cvs”实例
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
if(!str.indexOf("<end>")){//判断如果不满足cvs行条件就删除
pw.write(str);//将要写入文件的内容,可以多次write
}
};
bre.close();
pw.close();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
⑵ java代码怎样生成csv文件
我来说一下大致的实现步骤,具体实现需要你自己去写了
1.检索数据专,检索到的数据假定属为一个list
2.你需要自己写一个objectToString之类的方法来把检索到的数据转化为一个String或StringBuffer,就是往各字段间插",",往个记录间插"\r\n",如此这类的转换,假定转换好的字符串为strResult.
3.然后用下面的代码写在后台来控制下载,文件名那里你可以把时间格式控制好,或者用前台传过来的参数做名字。
response.setContentType("application/download;charset=UTF-8");
response.setHeader("Content-disposition","attachment;filename=\"" +new Date()+".csv\"");
⑶ java读取CSV文件
可以通过流的形式读取到所有内容,之后在转换成元素的形式进行实现。举例:
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.*;
public class Test{
public static void main(String[] args) {
Hashtable<String, String[]> dict = new Hashtable<String, String[]>();
try {
BufferedReader reader = new BufferedReader(new FileReader("test.csv"));
String line = null;
while((line=reader.readLine())!=null){
String item[] = line.split(",");
String item2[] = new String[19];
System.array(item,1,item2,0,19);
dict.put(item[0],item2);
}
Enumeration e2 = dict.keys();
while (e2.hasMoreElements()) {
String key = (String) e2.nextElement();
System.out.println(key);
String[] dd = (String[])dict.get(key);
for (int i=0;i<dd.length;i++) {
System.out.print(dd[i]+"\t");
}
System.out.println();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
⑷ java怎样写入一个csv文件
所以你写csv表格,这么做就可以了,每写一列就加一个,就是第二列。
距离版有个BufferWriter writer对象要写一个权csv文件。
writer.wrtie("第一列");
writer.write(",");
writer.write("第二列");
这就是一个简单的用,分割的csv文件。
⑸ 用java将三个csv表格文件,整合数据组合成一个文件。
//说思路:开始理解错了,以为让三个文件,变成一张整体的表..以后求助最好带上源文件
//费老劲了.把你这个图片去转成表格数据,然后又拆分成几个小细节表格...恼火啊..
//不过也学到知识了,csv文件..
//这里有一个问题,就是合并的文件,并不是你想要的顺序,因为你的文件名毫无规律,如果有规律
//合并后,就会是按顺序的..比如s1,s2,s3...好了上代码:
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileWriter;
importjava.io.FilenameFilter;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.io.SequenceInputStream;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Enumeration;
publicclassCsvMerge{
privateStringpath;//路径;
privateFiledir,files[];//目录,文件数组;
privateSequenceInputStreamsis;//序列流
privatePrintWriterpw;//输出流
privatebooleanflag;//标记
privatebyte[]bys;//容器
publicstaticvoidmain(String[]args){
newCsvMerge().init();//启动合并功能;
}
privatevoidinit(){
path="K:\IO测试\合并Csv文件";//确定路径;
dir=newFile(path);//目录位置
flag=dir.exists();
if(!flag){
System.out.println("目录不存在别费劲了..");
return;
}
files=dir.listFiles(newFilenameFilter(){//扫描目录,需要被合并的碎片文件
@Override
publicbooleanaccept(Filedir,Stringname){
returnname.endsWith("csv");
}
});
ArrayList<FileInputStream>al=newArrayList<FileInputStream>();//创建文件读取流集合;
try{
for(inti=0;i<files.length;i++)//创建分支流
al.add(newFileInputStream(files[i].getAbsoluteFile()));
}catch(FileNotFoundExceptione){
e.printStackTrace();
}
Enumeration<FileInputStream>en=Collections.enumeration(al);//拿到枚举对象;
sis=newSequenceInputStream(en);//初始化合并流;
bys=newbyte[1024];
try{
Filefile=newFile(dir,"Mer.csv");//目标合并文件;
if(file.exists()){
System.out.println("文件已经存在...");
return;
}
pw=newPrintWriter(newFileWriter(file),true);
for(inta=sis.read(bys);a!=-1;a=sis.read(bys)){
pw.println(newString(bys,0,a));
}
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}finally{
if(sis!=null){
try{
sis.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
//标记的是合并后的文件,碎片文件,随便你放,如果想按照顺序,就把名字取的有顺序
⑹ 用java导出.csv格式的文件
使用poi包,csv其实就是用逗号隔开的文本文件,每条记录占一行。
⑺ java对操作csv文件
java">importjava.io.BufferedReader;importjava.io.FileReader;publicclassTest{publicvoidtest(introw,intcol){try{BufferedReaderreader=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处理csv文件
我来说一下大致的实现步骤,具体实现需要你自己去写了
1.检索数据,检索到的数据假定为一个list
2.你需要自己写一个objectToString之类的方法来把检索到的数据转化为一个String或StringBuffer,就是往各字段间插",",往个记录间插"\r\n",如此这类的转换,假定转换好的字符串为strResult.
3.然后用下面的代码写在后台来控制下载,文件名那里你可以把时间格式控制好,或者用前台传过来的参数做名字。
response.setContentType("application/download;charset=UTF-8");
response.setHeader("Content-disposition","attachment;filename=\"" +new Date()+".csv\"");
OutputStream o = response.getOutputStream();
byte b[] = strResult.getBytes();
try{
o.write(b);
}catch(IOException e){
e.printStackTrace();
}finally{
o.close();
}
⑼ java 关于csv文件
希望对你有用
UTF8转换成GB2312当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能:
byte [] b;
String utf8_value;
utf8_value = request.getParameter("NAME");//从HTTP流中取"NAME"的UTF8数据
b = utf8_value.getBytes("8859_1"); //中间用ISO-8859-1过渡
String name = new String(b, "GB2312"); //转换成GB2312字符
在知道流长度的情况下将输入流转换成字节数组 Java中的输入流抽象类InputStream有int read(byte[] b, intoff, int len)方法,参数中byte[] b是用来存放从InputStream中读取的数据,intoff指定数组b的偏移地址,也就是数组b的起始下标,intlen指定需要读取的长度,方法返回实际读取的字节数。刚学Java的朋友可能要说:先定义一个与流长度等长的字节数组,调用read方法,指定起始下标为0,指定读取长度与数组长度等长,不是一下子可以读出来了吗?说的没错,笔者曾经也试着这样读取数据,但后来发现在读取网络数据时很不安全,我们想想在网络上获取数据可能并没那么流畅,数据流的传送可能会断断续续,所以并不能保证一次就能读取全部数据,特别是在读取大容量数据时更是如此,所以我们必须在读取数据时检测实际读到的长度,如果没有读完已知长度的数据就应该再次读取,以此循环检测,直到实际读取的长度累加与已知的长度相等,下面的代码实现了这一功能:
ServletInputStream inStream = request.getInputStream(); //取HTTP请求流
int size = request.getContentLength(); //取HTTP请求流长度
byte[] buffer = new byte[size]; //用于缓存每次读取的数据
byte[] in_b = new byte[size]; //用于存放结果的数组
int count = 0;
int rbyte = 0;
while (count < size) { //循环读取
rbyte = inStream.read(buffer); //每次实际读取长度存于rbyte中
for(int i=0;i
in_b[count + i] = buffer;
}
count += rbyte;
}
在不知道流长度的情况下将输入流转换成字节数组前面介绍了已知流长度的情况下的转换方法,那么当我们不知道流有多长时,也就是说不能确定转换后的字节数组有多大时,该怎么处理呢?笔者查看了JDK文档之后发现ByteArrayOutputStream有一个byte[]toByteArray()方法,该方法会自动创建一个字节数组,然后返回。于是就巧妙的用ByteArrayOutputStream来作中间过渡实现转换,其它处理跟上面所介绍已知长度的情况差不多。假设需要被转换的流已经放在inStream里了,我们可以用如下的代码实现这一功能:
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据
int rc = 0;
while ((rc = inStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果
⑽ java将查询数据导出成csv文件的问题
生成.csv文件有第三方包javacsv.jar,例子网上找,很简单
提示用户下载,用流实现,网络上更多
提供个JSP的例子给你。
<%@ page language="java" pageEncoding="UTF-8"%>
<%
// example:
// <a href="download.jsp?p=img/test.gif">download image</a>
String path = request.getParameter("p");
String name = request.getParameter("name");
String root = getServletContext().getRealPath(path);
if (name == null) {
int index = path.lastIndexOf("/");
if (index >= 0) {
name = path.substring(index + 1);
} else {
name = path;
}
}
response.setContentType("unknown");
response.addHeader("content-disposition", "filename=\"" + name + "\"");
java.io.OutputStream os = response.getOutputStream();
try {
java.io.FileInputStream fis = new java.io.FileInputStream(root);
byte[] b = new byte[1024];
int i = 0;
while ( (i = fis.read(b)) > 0 ) {
os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();
}
catch ( Exception e )
{
e.printStackTrace();
}
out.clear();
out = pageContext.pushBody();
%>