日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

java中输出时 什么作用_JAVA中输入和输出处理(Java I/O)重点总结

發(fā)布時(shí)間:2025/3/21 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中输出时 什么作用_JAVA中输入和输出处理(Java I/O)重点总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文件-使用File類操作文件:

什么是文件?? 文件可認(rèn)為是相關(guān)記錄或放在一起的數(shù)據(jù)的集合。

文件一般存儲(chǔ)在哪里?? 儲(chǔ)存在存儲(chǔ)設(shè)備里。

Java程序如何訪問(wèn)文件?? Java API:java.io.File 類

File類訪問(wèn)文件屬性:

注意:

創(chuàng)建File文件要先new然后構(gòu)造路徑名稱(類型是String)當(dāng)使用Java.io.File類創(chuàng)建路徑的時(shí)候文件名時(shí)不能用\要用\\或者/因?yàn)樵贘Ava中\(zhòng)有轉(zhuǎn)義的作用所以不能使用Java中的file并不僅僅指文件也可以指目錄

方法名稱? 說(shuō)明? boolean? ? exists( )? 判斷文件或目錄是否存在? boolean? ? isFile( )? 判斷是否是文件? boolean? ? isDirectory( )? 判斷是否是目錄? String? ? ? getPath( )? 返回此對(duì)象表示的文件的相對(duì)路徑名? String? ? ? getAbsolutePath( )? 返回此對(duì)象表示的文件的絕對(duì)路徑名? String? ? ? getName( )? 返回此對(duì)象表示的文件或目錄的名稱? boolean? ? delete( )? 刪除此對(duì)象指定的文件或目錄? boolean? ? createNewFile( )? 創(chuàng)建名稱的空文件,不創(chuàng)建文件夾? long? ? ? ? length()? 返回文件的長(zhǎng)度(單位為字節(jié))

注:

絕對(duì)路徑:從計(jì)算機(jī)盤(pán)符(根目錄)出發(fā),到最后的文件

相對(duì)路徑:從當(dāng)前路徑出發(fā),到最后的文件

length():如果文件不存在,則返回 0L(L代表是long這個(gè)類型)

流:

通過(guò)流來(lái)讀寫(xiě)文件:

流是有序的數(shù)據(jù)序列,是以先進(jìn)先出方式發(fā)送信息的通道。

讀數(shù)據(jù)是InputStream

寫(xiě)數(shù)據(jù)是OutputStream

Java流的分類:(輸入是讀,輸出是寫(xiě))

【輸入輸出流是相對(duì)于計(jì)算機(jī)內(nèi)存來(lái)說(shuō)的】

【字節(jié)流是8位通用字節(jié)流,字符流是16位Unicode字符流】

文本文件的讀寫(xiě):

用FileInputStream和FileOutputStream讀寫(xiě)文本文件用BufferedReader和BufferedWriter讀寫(xiě)文本文件

二進(jìn)制文件的讀寫(xiě):

使用DataInputStream和DataOutputStream讀寫(xiě)二進(jìn)制文件

InputStream(字節(jié)輸入流,是一個(gè)抽象類)類常用方法:

int read( )

【一個(gè)字節(jié)一個(gè)字節(jié)的讀出來(lái),返回的是該字節(jié)的整數(shù)表示形式】

int read(byte[] b)

【從輸出流讀取若干字節(jié),把這些字節(jié)保存到數(shù)組b中,返回的是讀取到的字節(jié)數(shù),如果到了輸入流的末尾,返回-1】

int read(byte[] b,int off,int len)

【從輸出流讀取若干字節(jié),把這些字節(jié)保存到數(shù)組b中,off指的是字節(jié)數(shù)組中開(kāi)始保存數(shù)據(jù)的起始下標(biāo),len指返回的是讀取到的字節(jié)數(shù),返回的是讀取到的字節(jié)數(shù),如果到了輸入流的末尾返回-1】

void close( )

【讀流讀完了應(yīng)該關(guān)了】

int available()

【可以從輸入流中讀取的字節(jié)數(shù)目】

子類FileInputStream常用的構(gòu)造方法:

FileInputStream(File file)

【可以傳一個(gè)文件】

FileInputStream(String name)

【也可以寫(xiě)一個(gè)路徑】

使用FileInputStream 讀文本文件:

方法一(一個(gè)一個(gè)取出來(lái)):

FileInputStream fis = new FileInputStream("d:/java160.txt");

int ch;

while((ch=fis.read()) != -1){

System.out.print((char)ch);

}

方法二(存在數(shù)組里然后取出來(lái)):

byte[] bytes = new byte[1024];

int ch;

//ch表示讀了多少字節(jié),如果文件內(nèi)容為空,則為-1

//一次讀1024

while((ch=fis.read(bytes))!=-1){

for(int i = 0;i

System.out.println((char)bytes[i]);

}

OutputStream類常用方法:

void write(int c)

void write(byte[] buf)

void write(byte[] b,int off,int len)

void close( )

void flush( ):【強(qiáng)制將緩沖區(qū)清空,有一些流自帶很大的空間,先把字符都放在這個(gè)空間里,等滿了就把緩沖區(qū)都放出去,所以flush就是強(qiáng)制把這些都沖出去( )】

子類FileOutputStream常用的構(gòu)造方法:

FileOutputStream (File file)

FileOutputStream(String name)

FileOutputStream(String name,boolean append)

【boolean append可以指定覆蓋或追加文件內(nèi)容,如果boolean為true那就會(huì)是追加而不是覆蓋】

寫(xiě)入方法:

fos = new FileOutputStream("d:/test/hello.txt");

String str = "好好學(xué)習(xí)";

//將字符打散成為一個(gè)字節(jié)數(shù)組

byte[] words = str.getBytes();

fos.write(words, 0,words.length);

System.out.println("文件已被更新");

常見(jiàn)錯(cuò)誤【1. 少寫(xiě)了一個(gè)字節(jié)過(guò)來(lái)? ? 2. 多寫(xiě)了很多空格過(guò)來(lái)】:

// 1、創(chuàng)建輸入流對(duì)象,負(fù)責(zé)讀取D:\我的青春誰(shuí)做主.txt文件

FileInputStream fis = new FileInputStream("D:\\我的青春誰(shuí)做主.txt");

//2、創(chuàng)建輸出流對(duì)象,負(fù)責(zé)將文件內(nèi)容寫(xiě)入到C:\myFile\my Prime.txt中

FileOutputStream fos = new FileOutputStream("C:\\myFile\\myPrime.txt",true);

// 3、創(chuàng)建中轉(zhuǎn)站數(shù)組,存放每次讀取的內(nèi)容

byte words [] = new char[1024];

// 4、通過(guò)循環(huán)實(shí)現(xiàn)文件讀寫(xiě)

while((fis.read())!=-1){

fis.read(words);? ? //讀取文件

fos.write(words, 0, words.length); }? ?//寫(xiě)入文件

少寫(xiě)了一個(gè)字節(jié)過(guò)來(lái)是因?yàn)閣hile((fis.read())!=-1)已經(jīng)讀了一次,然后又讀到words里多寫(xiě)了很多空格過(guò)來(lái)是因?yàn)閒os.write(words, 0, words.length)中用的是words.length,其中words共有1024個(gè)位置,除了讀到的之外還有很多空格所以也會(huì)輸出

正確寫(xiě)法應(yīng)該是:

int len = -1;

while((len =fis.read(words)) !=-1){

fos.write(words, 0, len); }

直接在while中把所有的都read出來(lái),然后在寫(xiě)的時(shí)候要從零一直到設(shè)置的len【len是讀到的所有字符的長(zhǎng)度】

字符編碼格式:按照一定的標(biāo)準(zhǔn)把字符編碼能給中文編碼的就是GBK、GB2312和ANSI

我們一般做的項(xiàng)目編碼是UTF-8(國(guó)際通用的編碼格式)

中文亂碼:原因(文件編碼格式和程序環(huán)境的編碼格式不一樣)

解決方法:

把windows的preferences的general中UTF-8改成GBK把文件用UTF-8另存字符流去讀的時(shí)候,可以指定字符流的編碼格式

System.out.println(System.getProperty("file.encoding"));獲得本地平臺(tái)的字符編碼類型

Reader類常用方法

【作用和用法都和InputStream一樣,正常使用就可以】:

int read( )

int read(char[ ] c)

read(char[ ] c,int off,int len)

void close( )

為了解決中文亂碼使用子類InputStreamReader

子類InputStreamReader常用的構(gòu)造方法:

InputStreamReader(InputStream in)

InputStreamReader(InputStream in,String charsetName)

【支持輸入的字符流,并且可以規(guī)定輸入的字符編碼格式】

孫子類FileReader類是InputStreamReader的子類【作用和用法都和FileInputStream一樣,正常使用就可以】:

new FileReader(File file)

new FileReader(String name)

該類只能按照系統(tǒng)默認(rèn)的字符編碼來(lái)讀取數(shù)據(jù),用戶不能指定其他的字符編碼類型

System.out.println(System.getProperty("file.encoding"));獲得本地平臺(tái)的字符編碼類型

有中文亂碼的缺陷所以一般使用InputStreamReader并且和FileInputStream fis = new FileInputStream("……"); 配合著來(lái)用

BufferedReader類:

如何提高字符流讀取文本文件的效率?

使用FileReader類與BufferedReader類

BufferedReader類是Reader類的子類

BufferedReader類帶有緩沖區(qū)

按行讀取內(nèi)容的readLine()方法(一行一行的讀)【BufferedReader類特有的方法】

Reader類常用方法:

int read( )

int read(char[ ] c)

read(char[ ] c,int off,int len)

void close( )

子類BufferedReader常用的構(gòu)造方法:

BufferedReader(Reader in)

子類BufferedReader特有的方法:

readLine()

注:

有時(shí)帶緩沖區(qū)的流讀不出東西來(lái)有可能是因?yàn)榱鳑](méi)關(guān),要用XXX.close關(guān)閉才能繼續(xù)使用;當(dāng)使用緩沖區(qū)的輸出流時(shí)流一定要關(guān)閉

Writer類:

Writer類常用方法:

write(String str)

write(String str,int off,int len)

void close()

void flush()

子類OutputStreamWriter(可以指定字符編碼格式)常用的構(gòu)造方法:

OutputStreamWriter(OutputStream out)

OutputStreamWriter(OutputStream out, String charsetName)

孫子類FileWriter:以下兩種構(gòu)造都可以重載,指定一個(gè)boolean類型的參數(shù),用來(lái)指定追加還是覆蓋文件內(nèi)容

new FileWriter (File file)

new FileWriter (String path)

一定要記住使用.flush()和.close(),這樣才能把存在緩沖區(qū)中的數(shù)據(jù)沖出來(lái)。

BufferedWriter類:

如何提高字符流寫(xiě)文本文件的效率?

使用FileWriter類與BufferedWriter類

【BufferedWriter類是Writer類的子類】

【BufferedWriter類帶有緩沖區(qū)的輸出流】

BufferedWriter常用的構(gòu)造方法:

BufferedWriter(Writer out)

.newLine():換行(寫(xiě)一個(gè)新航)

讀寫(xiě)二進(jìn)制文件:

DataInputStream類:

是FileInputStream的子類

與FileInputStream類結(jié)合使用讀取二進(jìn)制文件

DataOutputStream類:

是FileOutputStream的子類

與FileOutputStream類結(jié)合使用寫(xiě)二進(jìn)制文件

總結(jié):

序列化、反序列化:

序列化和反序列化的過(guò)程:

序列化是將對(duì)象的狀態(tài)寫(xiě)入到特定的流中的過(guò)程。

反序列化則是從特定的流中獲取數(shù)據(jù)重新構(gòu)建對(duì)象的過(guò)程。

對(duì)象輸入流(反序列化):

ObjectInputStream

反序列化的輸入方法:.readObject()【Object類型的,需要類型轉(zhuǎn)換】

對(duì)象輸出流(序列化):

ObjectOutputStream

序列化的輸出方法:.writeObject(Object)

常見(jiàn)異常:

NotSerializableException:類沒(méi)有實(shí)現(xiàn)Serializable接口,不可被序列化;要使用:implements Serializable來(lái)實(shí)現(xiàn)接口。

如果一個(gè)類想被序列化和他所有有關(guān)系的類都必須能被系列化(比如它的父類,子類…)

transient(關(guān)鍵字):屏蔽某些敏感字段的序列化

例如:private transient String password

總結(jié)

以上是生活随笔為你收集整理的java中输出时 什么作用_JAVA中输入和输出处理(Java I/O)重点总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。