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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

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

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

什么是文件?? 文件可認為是相關記錄或放在一起的數據的集合。

文件一般存儲在哪里?? 儲存在存儲設備里。

Java程序如何訪問文件?? Java API:java.io.File 類

File類訪問文件屬性:

注意:

創建File文件要先new然后構造路徑名稱(類型是String)當使用Java.io.File類創建路徑的時候文件名時不能用\要用\\或者/因為在JAva中\有轉義的作用所以不能使用Java中的file并不僅僅指文件也可以指目錄

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

注:

絕對路徑:從計算機盤符(根目錄)出發,到最后的文件

相對路徑:從當前路徑出發,到最后的文件

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

流:

通過流來讀寫文件:

流是有序的數據序列,是以先進先出方式發送信息的通道。

讀數據是InputStream

寫數據是OutputStream

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

【輸入輸出流是相對于計算機內存來說的】

【字節流是8位通用字節流,字符流是16位Unicode字符流】

文本文件的讀寫:

用FileInputStream和FileOutputStream讀寫文本文件用BufferedReader和BufferedWriter讀寫文本文件

二進制文件的讀寫:

使用DataInputStream和DataOutputStream讀寫二進制文件

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

int read( )

【一個字節一個字節的讀出來,返回的是該字節的整數表示形式】

int read(byte[] b)

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

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

【從輸出流讀取若干字節,把這些字節保存到數組b中,off指的是字節數組中開始保存數據的起始下標,len指返回的是讀取到的字節數,返回的是讀取到的字節數,如果到了輸入流的末尾返回-1】

void close( )

【讀流讀完了應該關了】

int available()

【可以從輸入流中讀取的字節數目】

子類FileInputStream常用的構造方法:

FileInputStream(File file)

【可以傳一個文件】

FileInputStream(String name)

【也可以寫一個路徑】

使用FileInputStream 讀文本文件:

方法一(一個一個取出來):

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

int ch;

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

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

}

方法二(存在數組里然后取出來):

byte[] bytes = new byte[1024];

int ch;

//ch表示讀了多少字節,如果文件內容為空,則為-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( ):【強制將緩沖區清空,有一些流自帶很大的空間,先把字符都放在這個空間里,等滿了就把緩沖區都放出去,所以flush就是強制把這些都沖出去( )】

子類FileOutputStream常用的構造方法:

FileOutputStream (File file)

FileOutputStream(String name)

FileOutputStream(String name,boolean append)

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

寫入方法:

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

String str = "好好學習";

//將字符打散成為一個字節數組

byte[] words = str.getBytes();

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

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

常見錯誤【1. 少寫了一個字節過來? ? 2. 多寫了很多空格過來】:

// 1、創建輸入流對象,負責讀取D:\我的青春誰做主.txt文件

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

//2、創建輸出流對象,負責將文件內容寫入到C:\myFile\my Prime.txt中

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

// 3、創建中轉站數組,存放每次讀取的內容

byte words [] = new char[1024];

// 4、通過循環實現文件讀寫

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

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

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

少寫了一個字節過來是因為while((fis.read())!=-1)已經讀了一次,然后又讀到words里多寫了很多空格過來是因為fos.write(words, 0, words.length)中用的是words.length,其中words共有1024個位置,除了讀到的之外還有很多空格所以也會輸出

正確寫法應該是:

int len = -1;

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

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

直接在while中把所有的都read出來,然后在寫的時候要從零一直到設置的len【len是讀到的所有字符的長度】

字符編碼格式:按照一定的標準把字符編碼能給中文編碼的就是GBK、GB2312和ANSI

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

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

解決方法:

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

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

Reader類常用方法

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

int read( )

int read(char[ ] c)

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

void close( )

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

子類InputStreamReader常用的構造方法:

InputStreamReader(InputStream in)

InputStreamReader(InputStream in,String charsetName)

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

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

new FileReader(File file)

new FileReader(String name)

該類只能按照系統默認的字符編碼來讀取數據,用戶不能指定其他的字符編碼類型

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

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

BufferedReader類:

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

使用FileReader類與BufferedReader類

BufferedReader類是Reader類的子類

BufferedReader類帶有緩沖區

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

Reader類常用方法:

int read( )

int read(char[ ] c)

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

void close( )

子類BufferedReader常用的構造方法:

BufferedReader(Reader in)

子類BufferedReader特有的方法:

readLine()

注:

有時帶緩沖區的流讀不出東西來有可能是因為流沒關,要用XXX.close關閉才能繼續使用;當使用緩沖區的輸出流時流一定要關閉

Writer類:

Writer類常用方法:

write(String str)

write(String str,int off,int len)

void close()

void flush()

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

OutputStreamWriter(OutputStream out)

OutputStreamWriter(OutputStream out, String charsetName)

孫子類FileWriter:以下兩種構造都可以重載,指定一個boolean類型的參數,用來指定追加還是覆蓋文件內容

new FileWriter (File file)

new FileWriter (String path)

一定要記住使用.flush()和.close(),這樣才能把存在緩沖區中的數據沖出來。

BufferedWriter類:

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

使用FileWriter類與BufferedWriter類

【BufferedWriter類是Writer類的子類】

【BufferedWriter類帶有緩沖區的輸出流】

BufferedWriter常用的構造方法:

BufferedWriter(Writer out)

.newLine():換行(寫一個新航)

讀寫二進制文件:

DataInputStream類:

是FileInputStream的子類

與FileInputStream類結合使用讀取二進制文件

DataOutputStream類:

是FileOutputStream的子類

與FileOutputStream類結合使用寫二進制文件

總結:

序列化、反序列化:

序列化和反序列化的過程:

序列化是將對象的狀態寫入到特定的流中的過程。

反序列化則是從特定的流中獲取數據重新構建對象的過程。

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

ObjectInputStream

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

對象輸出流(序列化):

ObjectOutputStream

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

常見異常:

NotSerializableException:類沒有實現Serializable接口,不可被序列化;要使用:implements Serializable來實現接口。

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

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

例如:private transient String password

總結

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

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