您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何使用ByteArrayOutputStream實現(xiàn)將數(shù)據(jù)寫入本地文件”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何使用ByteArrayOutputStream實現(xiàn)將數(shù)據(jù)寫入本地文件”這篇文章吧。
在一個項目中做一次性校驗部分,需要將校驗后數(shù)據(jù)寫入表格后上傳。巧的是,服務(wù)器Down了。作為一個新手實習(xí)生菜鳥,為了測試自己的代碼和輸出結(jié)果有沒有毛病,在大神同事的指點下選擇了先將表格輸出到本地
于是在百度瘋狂搜索“輸出流”、“輸出文件到本地”、“文件流”等,經(jīng)過多方搜集和探查以及加工,最后加上了一小段代碼
//測試-將表格導(dǎo)入本地文件 FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream("C:\\Users\\Administrator.DESKTOP-SFAEOA8\\Desktop\\consistencyCheckCommodityRuleTemplate.xlsx"); fileOutputStream.write(byteArrayOutputStream.toByteArray()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
以下是上傳Excel的部分代碼。將最后的上傳文件到dfs的方法注掉,以在準(zhǔn)備好的文件 C:\\Users\\Administrator.DESKTOP-SFAEOA8\\Desktop\\consistencyCheckCommodityRuleTemplate.xlsx 中輸出需要的結(jié)果
public void uploadExcel() { //獲取校驗數(shù)據(jù) List<DTO> consistencyCheck = getConsistencyCheck(); //創(chuàng)建模板信息 DataModel dataModel = setDataModel(); ......(此處省略一萬字) //創(chuàng)建ExcelData ExcelData excelData = setExcelData(); ......(此處也省略一萬字) //創(chuàng)建日志數(shù)據(jù) ConsistencyCheckLog consistencyCheckLog = setConsistencyCheckLog(); ......(此處又省略一萬字) //創(chuàng)建excel ByteArrayOutputStream byteArrayOutputStream = createExcel(dataModel, excelData); //測試-將表格導(dǎo)入本地文件 FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream("C:\\Users\\Administrator.DESKTOP-SFAEOA8\\Desktop\\consistencyCheckCommodityRuleTemplate.xlsx"); fileOutputStream.write(byteArrayOutputStream.toByteArray()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //上傳excel(無法上傳 先注掉好了) //uploadFileToDfs(consistencyCheckLog, byteArrayOutputStream); }
這樣就OK了,只添加了測試的部分,得到數(shù)據(jù)后也是放下了這顆菜心
ByteArrayOutputStream類是在創(chuàng)建它的實例時,程序內(nèi)部創(chuàng)建一個byte型別數(shù)組的緩沖區(qū),然后利ByteArrayOutputStream和ByteArrayInputStream的實例向數(shù)組中寫入或讀出byte型數(shù)據(jù)
字節(jié)數(shù)組輸出流在內(nèi)存中創(chuàng)建一個字節(jié)數(shù)組緩沖區(qū),所有發(fā)送到輸出流的數(shù)據(jù)保存在該字節(jié)數(shù)組緩沖區(qū)
成功創(chuàng)建字節(jié)數(shù)組輸出流對象后,可以參見以下列表中的方法,對流進(jìn)行寫操作或其他操作
序號 | 方法描述 |
---|---|
1 | public void reset() 將此字節(jié)數(shù)組輸出流的 count 字段重置為零,從而丟棄輸出流中目前已累積的所有數(shù)據(jù)輸出。 |
2 | public byte[] toByteArray() 創(chuàng)建一個新分配的字節(jié)數(shù)組。數(shù)組的大小和當(dāng)前輸出流的大小,內(nèi)容是當(dāng)前輸出流的拷貝。 |
3 | public String toString() 將緩沖區(qū)的內(nèi)容轉(zhuǎn)換為字符串,根據(jù)平臺的默認(rèn)字符編碼將字節(jié)轉(zhuǎn)換成字符。 |
4 | public void write(int w) 將指定的字節(jié)寫入此字節(jié)數(shù)組輸出流。 |
5 | public void write(byte []b, int off, int len) 將指定字節(jié)數(shù)組中從偏移量 off 開始的 len 個字節(jié)寫入此字節(jié)數(shù)組輸出流。 |
6 | public void writeTo(OutputStream outSt) 將此字節(jié)數(shù)組輸出流的全部內(nèi)容寫入到指定的輸出流參數(shù)中。 |
Java輸出流FileOutputStream也發(fā)揮了至關(guān)重要的作用
使用FileOutputStream寫入文件的過程同使用FileInputStream過程相同,都是先用File類打開本地文件,實例化輸入輸出流,然后調(diào)用流的讀寫方法讀取或?qū)懭霐?shù)據(jù),最后關(guān)閉流。
FileOutputStream類提供了多種文件寫入方法,可以單獨寫一個字節(jié)到文件,也可以寫一個byte數(shù)組到文件,也可以取byte數(shù)組的部分?jǐn)?shù)據(jù)寫入到文件。
FileOutputStream
可以把數(shù)據(jù)寫到文件中去
ByteArrayOutputStream
可以把其他地方的讀入的數(shù)據(jù)寫到這里面,最后獲取數(shù)據(jù)所有的 byte[],相當(dāng)于可以把數(shù)據(jù)全部讀到內(nèi)存中來.
// 把讀取的結(jié)果寫入到ByteByteArrayOutputStream public static void main(String[] args) throws IOException { // TODO Auto-generated method stub String s = "C:\\a.txt"; int len = 0; FileInputStream stream = new FileInputStream(s); ByteArrayOutputStream stream2 = new ByteArrayOutputStream(); byte[] buffer = new byte[5]; //先讀后寫,循環(huán)讀寫 while ((len = stream.read(buffer)) != -1) { stream2.write(buffer, 0, len); } byte[] data = stream2.toByteArray(); System.out.println(new String(data)); }
以上是“如何使用ByteArrayOutputStream實現(xiàn)將數(shù)據(jù)寫入本地文件”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。