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();
%>