當前位置:首頁 » 編程語言 » javacsv

javacsv

發布時間: 2022-02-05 10:06:40

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中指定行列位置的值

java讀取csv文件,按照指定格式: import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; import com.csvreader.CsvReader; import com.csvreader.CsvWriter; /** * 讀取CSV文件 * 所謂"CSV",是Comma Separated Value(逗號分隔值)的英文縮寫,通常都是純文本文件。 * 可以看成資料庫程序與電子表格之間一種中間通信文件,資料庫可以導出。csv格式,excel也可以導入並打開。csv文件,例子如下 * sj_mino一00一.jpg,漆一5二吧二,四FB55FE吧, * sj_mino一00二.jpg,四漆一二吧9,9三二0三C5C, * sj_mino一00三.jpg,四5一9二9,C四E吧0四陸漆, * */ public class CSVDeal{ public static void main(String[] args) { try { String[] stringList; String csvFilePath = "C:\\Users\\Administrator\\Desktop\\二0一四0二二漆一三59三陸.csv"; String sourceFileString= "C:\\Users\\Administrator\\Desktop\\test.csv"; CsvReader reader = new CsvReader(csvFilePath); //默認是逗號分隔符,UTF-吧編碼 CsvWriter writer = new CsvWriter(sourceFileString); /* * readRecord()判斷是否還有記錄,getValues()讀取當前記錄,然後指針下移 */ reader.readRecord(); writer.writeRecord(reader.getValues()); //讀取表頭 /* * 逐行讀取,以免文件太大 * 處理表頭後面的數據,這里是在第一二列數據統一加前綴"V" */ while(reader.readRecord()){ stringList = reader.getValues(); stringList[一一] = 'V' + stringList[一一]; writer.writeRecord(stringList); } reader.close(); writer.close(); }catch(Exception ex){ System.out.println(ex); } }

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

⑷ 用JAVA如何實現寫CSV文件

看你用來做什麼了, 該功能可簡單,可復雜:
CSV就是逗號分隔文件,每一行的內容都用逗號分開。

最簡單的辦法就是直接組合成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文件

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文件

看樓主比較懂,
參閱RandomAccessFile類
先用seek(long pos)把指針指向文件最後
然後視你的數據用
writeBytes(String s) //有漢字什麼的
writeChars(String s) //一般的字元串
writeUTF(String str) //有UTF-8的字元
寫入數據

⑼ 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();
}
}
}

熱點內容
睿威攝像頭密碼是多少 發布:2024-12-30 01:24:36 瀏覽:902
連接本地sql資料庫 發布:2024-12-30 01:23:39 瀏覽:131
聲控戴耳機解壓視頻 發布:2024-12-30 01:22:55 瀏覽:306
php數組記錄 發布:2024-12-30 01:22:05 瀏覽:420
筆記本5開夢幻要什麼配置 發布:2024-12-30 01:19:42 瀏覽:502
壓縮mb 發布:2024-12-30 01:12:16 瀏覽:138
c語言求字元串的長度 發布:2024-12-30 01:10:22 瀏覽:218
如何把安卓數據轉移到蘋果12 發布:2024-12-30 00:50:09 瀏覽:86
魯豫訪問金星 發布:2024-12-30 00:50:09 瀏覽:770
衣櫃密碼鎖如何開鎖 發布:2024-12-30 00:36:39 瀏覽:533