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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java入门系列-22-IO流

發(fā)布時(shí)間:2023/11/29 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java入门系列-22-IO流 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

File類的使用

Java程序如何訪問文件?通過 java.io.File 類

使用File類需要先創(chuàng)建文件對象 File file=new File(String pathname);,創(chuàng)建時(shí)在構(gòu)造函數(shù)中指定物理文件或目錄,然后通過文件對象的方法操作文件或目錄的屬性。

\ 是特殊字符,要使用需要轉(zhuǎn)義 \\

File 類常用方法

方法名稱說明
boolean exists()判斷文件或目錄是否存在
boolean isFile()判斷是否是文件
boolean isDirectory()判斷是否是目錄
String getPath()返回此對象表示的文件的相對路徑名
String getAbsolutePath()返回此對象表示的文件的絕對路徑
String getName()返回此對象指定的文件或目錄
boolean createNewFile()創(chuàng)建名稱的空文件,不創(chuàng)建文件夾
long length()返回文件的長度,單位為字節(jié),文件不存在則返回0L
File[] listFiles()返回一個(gè)抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名表示的目錄中的文件。
static File[] listRoots()列出可用文件系統(tǒng)根
boolean mkdirs()創(chuàng)建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。

使用示例:

import java.io.File; import java.io.IOException;public class TestFile {public static void main(String[] args) {//創(chuàng)建File對象 傳入文件的路徑File file=new File("D:\\a.txt");//創(chuàng)建File對象 傳入文件夾的路徑File dir=new File("D:/word");//判斷是否存在if(file.exists()) {if(file.isFile()) {//getName()獲取名字System.out.println(file.getName()+" 是文件");}else if(file.isDirectory()){System.out.println(file.getName()+" 是目錄");} }else {System.out.println(file.getName()+" 不存在!");try {//創(chuàng)建文件file.createNewFile();System.out.println("文件大小:"+file.length()+" 字節(jié)");} catch (IOException e) {e.printStackTrace();}}if(dir.exists()) {if(dir.isFile()) {System.out.println(dir.getName()+" 是文件");}else if(dir.isDirectory()) {System.out.println(dir.getName()+" 是文件夾");//絕對路徑System.out.println(dir.getAbsolutePath());} }else {System.out.println(dir.getName()+" 不存在!");//創(chuàng)建目錄dir.mkdirs();}} }

:指一連串流動(dòng)的字符,是以先進(jìn)先出方式發(fā)送信息的通道

輸入流:源數(shù)據(jù)流向程序(讀)

輸入流:程序中的數(shù)據(jù)流向目標(biāo)數(shù)據(jù)源(寫)

Java流的分類

按流向

  • 輸出流(OutputStream和Writer作為基類)
  • 輸入流(InputStream和Reader作為基類)

輸入輸出流是相對于計(jì)算機(jī)內(nèi)存來說的

按照處理數(shù)據(jù)單元?jiǎng)澐?/p>

  • 字節(jié)流

    • 字節(jié)輸入流(InputStream基類)
    • 字節(jié)輸出流(OutputStream基類)
  • 字符流

    • 字符輸入流(Reader基類)
    • 字符輸出流(Writer基類)

字節(jié)流是8位(1B)通用字節(jié)流,字符流是16位(2B)Unicode字符流

字節(jié)流

FileInputStream 是 InputStream 的子類

InputStream 類常用方法

方法名稱說明
int read()從輸入流中讀取數(shù)據(jù)的下一個(gè)字節(jié)。返回0到255的int值,如果到達(dá)流的末尾,則返回-1
int read(byte[] b)從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組 b 中。返回讀入緩沖區(qū)的總字節(jié)數(shù),如果達(dá)到末尾則返回-1
int read(byte[] b,int off,int len)將輸入流中最多 len 個(gè)數(shù)據(jù)字節(jié)讀入 byte數(shù)組
void close()關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源
int available()返回此輸入流下一個(gè)方法調(diào)用可以不受阻塞地從此輸入流讀取的估計(jì)字節(jié)數(shù)

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

名稱說明
FileInputStream(File file)通過打開一個(gè)到實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream,該文件通過文件系統(tǒng)中的 File 對象 file 指定。
FileInputStream(String name)通過打開一個(gè)到實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream,該文件通過文件系統(tǒng)中的路徑名 name 指定。

使用 FileInputStream 讀取文件

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;public class TestFileInputStream {public static void main(String[] args) {FileInputStream fis=null;try {fis=new FileInputStream("D:\\a.txt");//讀取結(jié)果存入StringBufferStringBuffer sb=new StringBuffer();System.out.println("預(yù)計(jì)讀取:"+fis.available()+"字節(jié)");//記錄每次讀取的長度int len=0;//緩沖區(qū)字節(jié)數(shù)組byte[] buff=new byte[1024];while((len=fis.read(buff))!=-1) {System.out.println("還剩余:"+fis.available()+"字節(jié)");sb.append(new String(buff,0,len));}System.out.println("結(jié)果:");System.out.println(sb);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (fis!=null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}} }

FileOutputStream 是 OutputStream 的子類

OutputStream 類常用方法

方法名稱說明
void write(int c)將制定的字節(jié)寫入此輸出流
void write(byte[] buf)將 b.length 個(gè)字節(jié)從指定的 byte 數(shù)組寫入此輸入流
void write(byte[] b,int off,int len)將指定 byte 數(shù)組中從偏移量 off 開始的 len 個(gè)字節(jié)寫入此輸出流
void close()關(guān)閉此輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源

FileOutputStream的構(gòu)造方法

名稱說明
FileOutputStream(File file)創(chuàng)建一個(gè)向指定 File 對象表示的文件中寫入數(shù)據(jù)的文件輸出流
FileOutputStream(String name)創(chuàng)建一個(gè)向具有指定名稱的文件中寫入數(shù)據(jù)的輸出文件流
FileOutputStream(String name,boolean append)第二個(gè)參數(shù)為 true,則將字節(jié)寫入文件末尾處,而不是寫入文件開始處

使用 FileOutputStream 寫文件

import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;public class TestFileOutputStream {public static void main(String[] args) {FileOutputStream fos=null;try {//創(chuàng)建輸出流對象fos=new FileOutputStream("D:\\c.txt");//要輸出的字符String str="hello world 你好";//將字符串轉(zhuǎn)成字節(jié)數(shù)組并寫入到流中fos.write(str.getBytes());//刷新流fos.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (fos!=null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}} }

字符流

上面的內(nèi)容我們看到,字節(jié)流不能直接操作字符,所以操作字符用字符流。

FileReader 是 Reader 的子類

Reader 類常用方法

方法名稱說明
int read()讀取單個(gè)字符
int read(char[] c)將字符讀入數(shù)組
read(char[] c,int off,int len)將字符讀入數(shù)組的某一部分
void close()關(guān)閉該流并釋放與之關(guān)聯(lián)的所有資源

使用 FileReader 讀取文本文件

import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.Reader;public class TestReader {public static void main(String[] args) {Reader r=null;try {//創(chuàng)建FileReader對象r=new FileReader("D:\\a.txt");//字符緩沖數(shù)組char[] chrs=new char[512];//記錄每次讀取的個(gè)數(shù)int len=0;//循環(huán)讀取while((len=r.read(chrs))!=-1) {String str=new String(chrs, 0, len);System.out.println(str);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (r!=null) {try {r.close();} catch (IOException e) {e.printStackTrace();}}}} }

FileWriter 是 Writer 的子類

Writer 類常用方法

方法名稱說明
write(String str)寫入字符串
write(String str,int off,int len)寫入字符串的某一部分
void close()關(guān)閉此流,但要先刷新它
void flush刷新該流的緩沖

使用 FileWriter 寫入文本文件

import java.io.FileWriter; import java.io.IOException; import java.io.Writer;public class TestWriter {public static void main(String[] args) {Writer w=null;try {//創(chuàng)建字符輸出流w=new FileWriter("D:\\msg.txt");String msg="hello every bady 兄嘚";//將字符串寫入到流中w.write(msg);w.flush();} catch (IOException e) {e.printStackTrace();}finally {if (w!=null) {try {w.close();} catch (IOException e) {e.printStackTrace();}}}} }

緩沖字符流

如果頻繁的對字符進(jìn)行讀寫操作,墻裂建議使用緩沖!

BufferedReader 類帶有緩沖區(qū),可以先把一批數(shù)據(jù)讀到緩沖區(qū),接下來的讀操作都是從緩沖區(qū)內(nèi)獲取數(shù)據(jù),避免每次都從數(shù)據(jù)源讀取數(shù)據(jù)進(jìn)行字符編碼轉(zhuǎn)換,從而提高讀取操作的效率。

使用BufferedReader讀取文本文件

import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;public class TestBufferedReader {public static void main(String[] args) {FileReader reader=null;BufferedReader br=null;try {//創(chuàng)建字符讀入流reader=new FileReader("D:\\a.txt");//將字符讀入流包裝成字符緩沖流br=new BufferedReader(reader);//記錄每行讀入的內(nèi)容String line=null;//用于拼接保存每行讀入的內(nèi)容StringBuffer content=new StringBuffer();while ((line=br.readLine())!=null) {content.append(line+"\n");}System.out.println("所有內(nèi)容:");System.out.println(content);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {if (reader!=null) {reader.close();}if (br!=null) {br.close();}} catch (Exception e) {e.printStackTrace();}}} }

BufferedReader 是 Reader 的子類,帶有緩沖區(qū),特有方法 readLine() 按行讀取內(nèi)容

BufferedWriter 類帶有緩沖區(qū),與BufferedReader的方向正好相反,BufferedWriter 是把一批數(shù)據(jù)寫到緩沖區(qū),當(dāng)緩沖區(qū)滿的時(shí)候,再把緩沖區(qū)的數(shù)據(jù)寫到字符輸出流中。避免每次都執(zhí)行物理寫操作,提高寫操作的效率。

使用 BufferedWriter 寫文件

import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException;public class TestBufferedWriter {public static void main(String[] args) {FileWriter writer=null;BufferedWriter bw=null;try {writer=new FileWriter("D:\\out.txt");bw=new BufferedWriter(writer);bw.write("hello");//內(nèi)容換行bw.newLine();bw.write("world");} catch (IOException e) {e.printStackTrace();}finally {try {if (bw!=null) {bw.close();}if (writer!=null) {writer.close();}} catch (IOException e) {e.printStackTrace();}}} }

關(guān)閉流的順序與創(chuàng)建流的順序相反

數(shù)據(jù)流

DataInputStream 類

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

DataOutputStream 類

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

使用數(shù)據(jù)流復(fù)制圖片

import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;public class TestCopy {public static void main(String[] args) {//文件輸入流FileInputStream fis=null;//數(shù)據(jù)輸入流(包裝fis得到)DataInputStream dis=null;//文件輸出流FileOutputStream fos=null;//數(shù)據(jù)輸出流(包裝fos得到)DataOutputStream dos=null;try {fis=new FileInputStream("D:\\a.jpg");dis=new DataInputStream(fis);fos=new FileOutputStream("F:\\b.jpg");dos=new DataOutputStream(fos);//緩沖數(shù)組byte[] buff=new byte[1024];//記錄每次讀取的字節(jié)個(gè)數(shù)int len=0;//循環(huán)讀入while((len=dis.read(buff))!=-1) {//循環(huán)寫入len個(gè)字節(jié)dos.write(buff,0,len);}System.out.println("完成");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {if (dis!=null) {dis.close();}if (dos!=null) {dos.close();}} catch (IOException e) {e.printStackTrace();}}} }

總結(jié)

以上是生活随笔為你收集整理的Java入门系列-22-IO流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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