日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java io流读写文件换行_java基础io流——OutputStream和InputStream的故事(温故知新)...

發布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java io流读写文件换行_java基础io流——OutputStream和InputStream的故事(温故知新)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

io流概述:

IO流用來處理設備之間的數據傳輸,上傳文件和下載文件,Java對數據的操作是通過流的方式,Java用于操作流的對象都在IO包中。

IO流分類

按照數據流向

輸入流 讀入數據

輸出流 寫出數據

按照數據類型

字節流

字符流

什么情況下使用哪種流呢?

如果數據所在的文件通過windows自帶的記事本打開并能讀懂里面的內容,就用字符流,其他用字節流。

如果你什么都不知道,就用字節流。

IO流常用基類

字節流的抽象基類:

InputStream ,OutputStream。

字符流的抽象基類:

Reader , Writer。

注:

由這四個類派生出來的子類名稱都是以其父類名作為子類名的后綴。

如:InputStream的子類FileInputStream。

如:Reader的子類FileReader。

OutputStream的子類FileOutputStream

構造方法:

FileOutputStream(File file)

FileOutputStream(String name)

推薦第二種構造方法:FileOutputStream?outputStream?=?new?FileOutputStream("a.txt");

創建字節輸出流對象了做了幾件事情:A:調用系統功能去創建文件

B:創建outputStream對象

C:把foutputStream對象指向這個文件

通過字節輸出流寫出數據到文本public?void?write(int?b)public?void?write(byte[]?b)public?void?write(byte[]?b,int?off,int?len)

從方法中可看出,只能通過字節寫出outputStream.write("hello".getBytes());?文本中出現hello

outputStream.write(96)??//文本中出現?abyte[]?bys={97,98,99,100,101};

outputStream.write(bys,1,3);?文本中出現bcd

如此寫出,文本中數據不會換行,不會追加,每次寫出都是覆蓋原來。

追加:FileOutputStream?outputStream?=?new?FileOutputStream("a.txt",true);//第二個參數true設置為可追加。

換行 \n\r :for?(int?i?=?0;?i?<5?;?i++)?{

outputStream.write("hello".getBytes());

outputStream.write("\n\r".getBytes());

}

注:用完流一定要記得關閉。outputStream.close();

完整示例:package?io2;import?java.io.FileOutputStream;import?java.io.IOException;/**

*?new?FileOutputStream("a.txt",true);??第二個參數true,設置為寫入的數據拼接在尾部

*?\n\r?換行

*?write(bys,1,3);??寫入字節數組

*/public?class?out?{????public?static?void?main(String?args[]){

FileOutputStream?outputStream?=?null;????????try?{????????????//FileOutputStream?fos?=?new?FileOutputStream(file);

outputStream?=?new?FileOutputStream("a.txt",true);????????????/*

*?創建字節輸出流對象了做了幾件事情:

*?A:調用系統功能去創建文件

*?B:創建outputStream對象

*?C:把foutputStream對象指向這個文件

*///????????????for?(int?i?=?0;?i?<5?;?i++)?{//????????????????outputStream.write("hello".getBytes());//????????????????outputStream.write("\n\r".getBytes());//????????????}

byte[]?bys={97,98,99,100,101};

outputStream.write(bys,1,3);

}?catch?(IOException?e)?{

e.printStackTrace();

}????????finally?{????????????try?{

outputStream.close();

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

}

InputStream的子類FileInputStream

FileInputStream的構造方法FileInputStream(File?file)

FileInputStream(String?name)

推薦第二種構造方法:FileInputStream?inputStream?=?new?FileInputStream("a.txt");

把剛才寫的數據現在讀取到控制臺:public?int?read()public?int?read(byte[]?b)

第一個read是讀一個字節,第二個read是讀一個字節數組。//讀一個字節int?by?=?0;while?((by=inputStream.read())!=-1){

System.out.println((char)by);

}

讀到沒數據了就返回-1,這個用來判斷是否讀完。//讀一個字節數組,一般是1024大小int?len?=?0?;byte[]?bys?=?new?byte[1024];while?((len?=?inputStream.read(bys))?!=?-1)?{

System.out.println(new?String(bys,0,len));

}

兩個read的返回值略有不同,read()返回讀取的字節,讀到末尾返回-1,read(byte[] b)返回的是讀到的字節個數,讀到的字節放在了bytes字節數組里,讀到末尾沒數據了返回-1。

兩種讀取方式圖解:

image

同樣的用完了流,也要及時的關閉,以防占用內存。inputStream.close();

完整示例:

建議以字節數組的方式讀取數據。package?io2;import?java.io.FileInputStream;import?java.io.FileNotFoundException;import?java.io.IOException;/**

*?Create?by?stefan

*?Date?on?2018-05-27??23:00

*?Convertion?over?Configuration!

*/public?class?input2?{????public?static?void?main(String?args[]){

FileInputStream?inputStream?=?null;????????try?{

inputStream?=?new?FileInputStream("a.txt");//????????????byte[]?bys?=?new?byte[4];//????????????int?len?=?inputStream.read(bys);//????????????System.out.println(new?String(bys));??//bcd//????????????System.out.println(len);??//3//????????????System.out.println(inputStream.read(bys));??//-1

int?len?=?0?;????????????byte[]?bys?=?new?byte[1024];????????????while?((len?=?inputStream.read(bys))?!=?-1)?{

System.out.println(new?String(bys,0,len));

}????????????/**

*????public?String(byte?bytes[])?{

this(bytes,?0,?bytes.length);

}

*/

}?catch?(IOException?e)?{

e.printStackTrace();

}finally?{????????????try?{

inputStream.close();

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

}

字節流復制文件

利用輸入流讀取一個文件里的字節,再利用輸出流將讀取到的字節寫出到另一個文件中(不存在會自動創建)package?io2;import?java.io.FileInputStream;import?java.io.FileNotFoundException;import?java.io.FileOutputStream;import?java.io.IOException;import?java.util.Arrays;/**

*?Create?by?stefan

*?Date?on?2018-05-27??23:19

*?Convertion?over?Configuration!

*/public?class?copy?{????public?static?void?main(String?args[])?throws?IOException?{

FileInputStream?inputStream?=?new?FileInputStream("E:\\huge1.jpg");

FileOutputStream?outputStream?=?new?FileOutputStream("E:\\古月.jpg");

byte[]?bytes?=?new?byte[1024];????????int?len?=?0;????????while?((len=inputStream.read(bytes))?!=?-1)?{

outputStream.write(bytes,0,len);

}

inputStream.close();

outputStream.close();

}

}

作者:韻呀

鏈接:https://www.jianshu.com/p/63d1751d3eac

總結

以上是生活随笔為你收集整理的java io流读写文件换行_java基础io流——OutputStream和InputStream的故事(温故知新)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。