Java之通過(guò)OutputStream寫(xiě)入文件與文件復(fù)制問(wèn)題
通過(guò)OutputStream寫(xiě)入文件與文件復(fù)制
1.知識(shí)點(diǎn)
1,首先不管是InputStream讀read,還是OutputStream寫(xiě)write,都支持讀寫(xiě)一定長(zhǎng)度的byte[]。
2,當(dāng)然,還支持一個(gè)字節(jié)一個(gè)字節(jié)的讀寫(xiě),那么一個(gè)字節(jié)一個(gè)字節(jié)的讀寫(xiě),讀出來(lái)的字節(jié)和寫(xiě)入的字節(jié)都是用的int類(lèi)型的參數(shù)。
3,int參數(shù)只會(huì)使用它的8個(gè)二進(jìn)制位,也就是說(shuō)類(lèi)似于將int強(qiáng)行轉(zhuǎn)換為byte,我感覺(jué)很無(wú)聊的設(shè)計(jì),還不如直接用byte作為參數(shù),這樣搞是因?yàn)閕nt太火嗎?
4,所以所謂的復(fù)制,就是把所有的字節(jié)讀出來(lái),然后寫(xiě)入文件即可。
2.寫(xiě)入文件示例
寫(xiě)入對(duì)象FILE_FOR_WRITE中
//工具類(lèi) package com.maoge.stream; import java.io.File; public class StreamUtils { ?? ?//用于定義每次讀取的長(zhǎng)度 ?? ?public static final int BUFFER_LENGTH=512; ?? ?//文件對(duì)象 ?? ?public static File FILE_FOR_READ; ?? ?public static File FILE_FOR_WRITE; ?? ?static{ ?? ??? ?FILE_FOR_READ=new File("C:\\test.txt");? ?? ??? ?FILE_FOR_WRITE=new File("C:\\result.txt");? ?? ?} }
寫(xiě)入過(guò)程
package com.maoge.stream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class OutputStreamDemo { ?? ?public static void main(String[] args){ ?? ??? ?writeToFile(); ?? ?} ?? ?public static void writeToFile(){ ?? ??? ?byte buffer[]=buffer=new String("hello world!").getBytes(); ?? ??? ?OutputStream out=null; ?? ??? ?try { ?? ??? ??? ?out = new FileOutputStream(StreamUtils.FILE_FOR_WRITE); ?? ??? ??? ?out.write(buffer, 0, buffer.length); ?? ??? ?} catch (Exception ex) { ?? ??? ??? ?System.out.println(ex.toString()); ?? ??? ?}finally{ ?? ??? ??? ?try { ?? ??? ??? ??? ?out.close(); ?? ??? ??? ?} catch (IOException ioEx) { ?? ??? ??? ??? ?System.out.println(ioEx.toString()); ?? ??? ??? ?} ?? ??? ?}?? ? ?? ?} }
3.文件復(fù)制示例
直接演示復(fù)制圖片,因?yàn)閳D片也是二進(jìn)制位組成的
源文件test.jpg這個(gè)需要找個(gè)圖片,目的文件result.jpg這個(gè)是復(fù)制后生產(chǎn)的
//工具類(lèi) package com.maoge.stream; import java.io.File; public class StreamUtils { ?? ?//用于定義每次讀取的長(zhǎng)度 ?? ?public static final int BUFFER_LENGTH=512; ?? ?//文件對(duì)象 ?? ?public static File FILE_FOR_READ; ?? ?public static File FILE_FOR_WRITE; ?? ?static{ ?? ??? ?FILE_FOR_READ=new File("C:\\test.jpg");? ?? ??? ?FILE_FOR_WRITE=new File("C:\\result.jpg");? ?? ?} }
復(fù)制過(guò)程,該方法是OutputStreamDemo類(lèi)的靜態(tài)方法。
public static void fileCopy(){ ?? ??? ?FileInputStream in=null; ?? ??? ?FileOutputStream out=null; ?? ??? ?try { ?? ??? ??? ?in=new FileInputStream(StreamUtils.FILE_FOR_READ); ?? ??? ??? ?out=new FileOutputStream(StreamUtils.FILE_FOR_WRITE); ?? ??? ??? ?int c; ?? ??? ??? ?while((c=in.read())!=-1) ?? ??? ??? ??? ?out.write(c); ?? ??? ?} catch (Exception ex) { ?? ??? ??? ?System.out.println(ex.toString()); ?? ??? ?}finally{ ?? ??? ??? ?try { ?? ??? ??? ??? ?in.close(); ?? ??? ??? ?} catch (IOException ioEx) { ?? ??? ??? ??? ?System.out.println(ioEx.toString()); ?? ??? ??? ?} ?? ??? ??? ?try { ?? ??? ??? ??? ?out.close(); ?? ??? ??? ?} catch (IOException ioEx) { ?? ??? ??? ??? ?System.out.println(ioEx.toString()); ?? ??? ??? ?} ?? ??? ?} ?? ?}
java寫(xiě)入文件問(wèn)題(FileOutputStream的使用)
實(shí)現(xiàn)在控制臺(tái)寫(xiě)入相關(guān)文字,并添加到指定的文件中,并實(shí)現(xiàn)讀取文件內(nèi)容
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; ? public class Fileout { ?? ?Scanner inScanner = new Scanner(System.in); ?? ?public void f(String address) throws IOException ?? ?{ ?? ? ?? ?FileOutputStream out=new FileOutputStream(address, true); ?? ?String buf; ?? ?System.out.println("請(qǐng)輸入"); ?? ?buf= inScanner.nextLine(); ?? ?byte buy[]=buf.getBytes(); ?? ?out.write(buy); ?? ? ?? ?FileInputStream fin=new FileInputStream(address);?? ? ?? ?byte[] bs=new byte[1024];?? ? ?? ?int count=0;?? ? ? ?? ?while((count=fin.read(bs))>0)?? ??? ??? ??? ? ?? ?{ ?? ? ?? ??? ? ?? ??? ?String str=new String(bs,0,count);?? ?//反復(fù)定義新變量:每一次都 重新定義新變量,接收新讀取的數(shù)據(jù) ? ?? ??? ?System.out.println(str);?? ??? ?//反復(fù)輸出新變量:每一次都 輸出重新定義的新變量 ?? ?} ?? ?fin.close(); ?? ?} ?? ?public static void main(String[] args) throws IOException { ?? ??? ? ?? ??? ?Fileout out=new Fileout(); ?? ??? ?out.f("f://student.txt");?? ? ?? ?} }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用cmd根據(jù)WSDL網(wǎng)址生成java客戶端代碼的實(shí)現(xiàn)
這篇文章主要介紹了使用cmd根據(jù)WSDL網(wǎng)址生成java客戶端代碼的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Java微信公眾平臺(tái)開(kāi)發(fā)(2) 微信服務(wù)器post消息體的接收
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開(kāi)發(fā)第二步,微信服務(wù)器post消息體的接收,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Springboot中動(dòng)態(tài)語(yǔ)言groovy介紹
Apache的Groovy是Java平臺(tái)上設(shè)計(jì)的面向?qū)ο缶幊陶Z(yǔ)言,這門(mén)動(dòng)態(tài)語(yǔ)言擁有類(lèi)似Python、Ruby和Smalltalk中的一些特性,可以作為Java平臺(tái)的腳本語(yǔ)言使用,這篇文章主要介紹了springboot中如何使用groovy,需要的朋友可以參考下2022-09-09java 中Spark中將對(duì)象序列化存儲(chǔ)到hdfs
這篇文章主要介紹了java 中Spark中將對(duì)象序列化存儲(chǔ)到hdfs的相關(guān)資料,需要的朋友可以參考下2017-06-06