真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java中的IO流分為哪幾類

今天就跟大家聊聊有關(guān)java中的IO流分為哪幾類,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括陸豐網(wǎng)站建設(shè)、陸豐網(wǎng)站制作、陸豐網(wǎng)頁制作以及陸豐網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,陸豐網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到陸豐省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

流是一種抽象概念,它代表了數(shù)據(jù)的無結(jié)構(gòu)化傳遞。按照流的方式進(jìn)行輸入輸出,數(shù)據(jù)被當(dāng)成無結(jié)構(gòu)的字節(jié)序或字符序列。從流中取得數(shù)據(jù)的操作稱為提取操作,而向流中添加數(shù)據(jù)的操作稱為插入操作。用來進(jìn)行輸入輸出操作的流就稱為IO流。換句話說,IO流就是以流的方式進(jìn)行輸入輸出

一、IO:上傳下載,寫入寫出

流: 一連串流動的數(shù)據(jù),以先入先出的方式進(jìn)行流動,管道,以程序?yàn)橹行?、程序與網(wǎng)絡(luò)|文件|服務(wù)器|數(shù)組.

分類

1)按照流向:

輸入流;輸出流

2)操作單元分:

字節(jié)流 (萬能流):任何內(nèi)容都可以轉(zhuǎn)為字節(jié),可以傳輸文本,圖片,音頻;字符流 :只能操作純文本數(shù)據(jù)

3)按照功能:

節(jié)點(diǎn)流 : 包裹源頭,實(shí)現(xiàn)基本功能;功能流 : 對節(jié)點(diǎn)流增強(qiáng)性能,提高效率

4)各個(gè)分類之間是相輔相成的

字節(jié)流

(1)字節(jié)輸入流 : InputStream 此抽象類是表示字節(jié)輸入流的所有類的超類;FileInputStream 從文件系統(tǒng)中的某個(gè)文件中獲得輸入字節(jié)

//字節(jié)流輸入 InputStream 
//導(dǎo)包	導(dǎo)包快捷鍵: ctrl+shift+o
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Demo01 {
	public static void main(String[] args) throws IOException {
		//FileInputStream(String name) 
		通過打開一個(gè)到實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream,該文件通過文件系統(tǒng)中的路徑名 name 指定
		//FileInputStream(File file) 
		通過打開一個(gè)到實(shí)際文件的連接來創(chuàng)建一個(gè) FileInputStream,
		該文件通過文件系統(tǒng)中的 File 對象 file 指定
		InputStream is=new FileInputStream(new File("D:/test.txt"));//創(chuàng)建D盤符的根目錄下的文件
		System.out.println(is);
		//方式1: int read() 讀入數(shù)據(jù) 一個(gè)字節(jié)一個(gè)字節(jié)讀入
		/*int num=is.read();
		System.out.println((char)num);
		num=is.read();
		System.out.println((char)num);
		System.out.println((char)(is.read()));*/
		//方式2:使用循環(huán),循環(huán)讀入,可以簡化代碼,重復(fù)代碼只寫一次,但還是一個(gè)字節(jié)一個(gè)字節(jié)的讀入
		/*int num=-1;
		while((num=is.read())!=-1){
			System.out.println((char)num);
		}*/
		//方式3:int read(byte[] b) 一個(gè)字節(jié)數(shù)組一個(gè)字節(jié)數(shù)組的讀入
		//返回值: 返回讀入到字節(jié)數(shù)組中數(shù)據(jù)的個(gè)數(shù),沒有讀到返回-1
		byte[] car=new byte[1];
		//int len=is.read(car); 
		int len=-1;
		while((len=is.read(car))!=-1){
			System.out.println(new String(car,0,len));
		}
		//關(guān)閉
		is.close();
	}
}

(2)字節(jié)輸出流: OutputStream   此抽象類是表示輸出字節(jié)流的所有類的超類;FileOutputStream   文件輸出流是用于將數(shù)據(jù)寫入 File 的輸出流

//字節(jié)輸出流 OutputStream
//導(dǎo)包	導(dǎo)包快捷鍵: ctrl+shift+o
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Demo02 {
	public static void main(String[] args) {
		//FileOutputStream(String name)創(chuàng)建一個(gè)向具有指定名稱的文件中寫入數(shù)據(jù)的輸出文件流
		//FileOutputStream(String name,boolean append)  
		創(chuàng)建一個(gè)向具有指定 name 的文件中寫入數(shù)據(jù)的輸出文件流
		//FileOutputStream(File file,boolean append) 
		創(chuàng)建一個(gè)向指定 File 對象表示的文件中寫入數(shù)據(jù)的文件輸出流
		//boolean append	返回值:true追加,false不追加(默認(rèn)false)
		OutputStream os=null;
		//try...catch(){}	捕捉異常,處理異常
		try {
			//1.選擇流
			os=new FileOutputStream("D:/hhh.txt",hhtrue); 
			//文件不存在,系統(tǒng)會自動幫我們創(chuàng)建,但文件夾不會
			//2.準(zhǔn)備數(shù)據(jù)
			String str="要好好學(xué)習(xí),天天向上..."; 
			byte[] c和=str.getBytes();
			//3.寫出 void write(byte[] b)  
			os.write(ch);
			//4.刷出
			os.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			//5.關(guān)閉
			try {//預(yù)防空指針異常
				if(os!=null){
					os.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

功能流

緩沖流: 增強(qiáng)功能,提高性能,加快讀寫效率

1)字節(jié)流:

BufferedInputStream 字節(jié)輸入流緩沖流

BufferedOutputStream 字節(jié)輸出流緩沖流

沒有新增方法,可以發(fā)生多態(tài)使用

//導(dǎo)包
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class BufferedInputStream01 {
	public static void main(String[] args) throws IOException {
		//1.選擇流
		//BufferedInputStream(InputStream in) 
		InputStream is=new BufferedInputStream(new FileInputStream("D:/hehe.txt"));
		OutputStream os=new BufferedOutputStream(new FileOutputStream("E:/hengheng.txt") );
		//2.讀寫
		byte[] car=new byte[1024];
		int len=-1;
		while((len=is.read(car))!=-1){
			os.write(car,0,len);
		}
		//3.刷出
		os.flush();
		//4.關(guān)閉
		os.close();
		is.close();
	}
}

2)字符流:

BufferedReader 字符輸入流緩沖流

新增方法: String readLine() 讀取一個(gè)文本行

BufferedWriter 字符輸出流緩沖流

新增方法: void newLine() 寫入一個(gè)行分隔符

//導(dǎo)包
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedReader02 {
	public static void main(String[] args) throws IOException {
		//1.選擇流  導(dǎo)包快捷鍵: ctrl+shift+o
		BufferedReader br=new BufferedReader(new FileReader("D:/hehe.txt"));
		BufferedWriter bw=new BufferedWriter(new FileWriter("D:/ccc.txt"));
		//2.讀寫
		String msg=null;
		while((msg=br.readLine())!=null){
			bw.write(msg);
			bw.newLine();
		}
		//3.刷出
		bw.flush();
		//4.關(guān)閉
		bw.close();
		br.close();
	}
}

字符流

只能操作純文本

1)節(jié)點(diǎn)流:

(1)字符輸入流:Reader 讀取字符流的抽象類;FileReader 用來讀取字符文件的便捷類

//字符輸入流 Reader
//導(dǎo)包	導(dǎo)包快捷鍵: ctrl+shift+o
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Demo03 {
	public static void main(String[] args) {
		//FileReader(String fileName) 
		Reader rd=null;
		try {
			//1.選擇流
			rd=new FileReader("D:/hehe.txt");//創(chuàng)建D盤符的根目錄下的文件
			//2.讀入
			//方法1:int read() 讀取單個(gè)字符。 
			/*System.out.println((char)rd.read());
			System.out.println((char)rd.read());
			System.out.println((char)rd.read());
			System.out.println((char)rd.read());*/
			int len=-1;  //存儲讀到的數(shù)據(jù)  如果為-1,證明已達(dá)到末尾
			//方法2:
			/*while(-1!=(len=rd.read())){
				System.out.println((char)len);
			}*/
			//方法3:int read(char[] cbuf)  將字符讀入數(shù)組。
			char[] car=new char[1024];
			while((len=rd.read(car))!=-1){
				System.out.println(new String(car,0,len));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			if(rd!=null){
				try {
					//關(guān)閉功能
					rd.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}
}

(2)字符輸出流: Writer 寫入字符流的抽象類;FileWriter 用來寫入字符文件的便捷類

//字符輸出流:Writer
//導(dǎo)包	導(dǎo)包快捷鍵: ctrl+shift+o
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class CharDemo02 {
	public static void main(String[] args) {
		//FileWriter(File file) 		//默認(rèn)不追加
		//FileWriter(File file, boolean append)  	
		//FileWriter(String file)  
		//FileWriter(String file, boolean append)  
		Writer rt=null;
		try {
			//1.選擇流
			rt=new FileWriter("D:/houhou.txt",true);
			//2.寫出
			/*	void write(char[] cbuf)  寫入字符數(shù)組 
				void write(char[] cbuf, int off, int len) 寫入字符數(shù)組的某一部分
				void write(int c) 寫入單個(gè)字符
				void write(String str)  寫入字符串 
				void write(String str, int off, int len) 寫入字符串的某一部分 
			*/
			rt.write(97);
			rt.write("\r\n");  		//換行
			rt.write("你真好看!!!!");
			rt.write("\r\n");
			rt.write("你真好看!!!!",2,2);
			rt.write("\r\n");
			char[] ch={'a','b','c','d','e'};
			rt.write(ch);
			rt.write("\r\n");
			rt.write(ch,2,3);
			//3.刷出
			rt.flush();		
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			//4.關(guān)閉
			if(null!=rt){
				try {
					rt.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

Data流(字節(jié)節(jié)點(diǎn)流)

Data流(字節(jié)節(jié)點(diǎn)流):

讀寫基本數(shù)據(jù)類型+String類型數(shù)據(jù),是字節(jié)流功能流的一種

DataInputStream 新增方法: readXxx()

DataOutputStream 新增方法: writeXxx()

存在新增方法不能發(fā)生多態(tài),先寫出再寫入

可能碰到的異常:EOFException 文件有,內(nèi)容讀入不到,必須讀入的是寫出的源文件

//導(dǎo)包
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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 Data01 {
	public static void main(String[] args) throws IOException {
		//調(diào)用方法
		write("D:/data.txt");
		read("D:/data1.txt");
	}
	//讀入
	public static void read(String path) throws IOException{
		//1.輸入流 數(shù)據(jù)類型+數(shù)據(jù)
		DataInputStream in=new DataInputStream(new  BufferedInputStream(new FileInputStream(path)));
		//2.讀入
		int i=in.readInt();
		boolean b=in.readBoolean();
		String s=in.readUTF();
		System.out.println(i+"-->"+b+"-->"+s);
		//3.關(guān)閉
		in.close();
	}
	//寫出
	public static void write(String path) throws IOException{
		//1.輸出流
		DataOutputStream out=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(path)));
		//2.準(zhǔn)備數(shù)據(jù)
		int i=101;
		boolean f=false;
		String s="哈哈";
		//3.寫出  寫出和讀入的順序要保持一致
		out.writeInt(i);
		out.writeBoolean(f);
		out.writeUTF(s);
		//4.刷出
		out.flush();
		//5.關(guān)閉
		out.close();
	}
}

對象流

Object 保存數(shù)據(jù)類型+數(shù)據(jù)

字節(jié)的功能流:當(dāng)想要傳輸|讀寫對象類型數(shù)據(jù)的時(shí)候,可以使用一個(gè)對象流

序列化: 把對象類型的數(shù)據(jù)轉(zhuǎn)化為可存儲|可傳輸?shù)臓顟B(tài)的過程

ObjectInputStream()    反序列化輸入流   新增方法: readObject()

ObjectOutputStream()   序列化輸出流       新增方法: writeObject()

注意:

1)先序列化后反序列化

2)序列化反序列讀寫順序一致

3)不是所有的類都能序列化 java.io.Serializable 空接口

4)不是所有的屬性都需要序列化 transient

5)static內(nèi)容不會被序列化

6)如果父類實(shí)現(xiàn)Serializable接口,子類中可以序列化所有內(nèi)容

如果子類實(shí)現(xiàn)Serializable接口,但是父類沒有實(shí)現(xiàn),子類只能序列化子類獨(dú)有的內(nèi)容

//導(dǎo)包
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;
public class ObjectDemo02 {
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		write("D:/object.txt");
		read("D:/object.txt");
	}
	//反序列化輸入
	public static void read(String path) throws IOException, ClassNotFoundException{
		//1.輸入流
		ObjectInputStream is=new ObjectInputStream(new BufferedInputStream(new FileInputStream(path)));
		//2.讀入
		Object p= is.readObject();
		int[] arr= (int[]) is.readObject();
		if(p instanceof Person){
			Person person=(Person)p;
			System.out.println(person.getName());
		}
		System.out.println(p);
		System.out.println(Arrays.toString(arr));
		//3,關(guān)閉
		is.close();
	}
	//序列化輸出
	public static void write(String path) throws IOException{
		//1.輸出對象信息
		ObjectOutputStream os=new ObjectOutputStream(new BufferedOutputStream(new 
		FileOutputStream(path)));
		//2.準(zhǔn)備數(shù)據(jù)
		Person p=new Person("aaa",18);
		int[] arr={1,2,3,4};
		//3.輸出
		os.writeObject(p);
		os.writeObject(arr);
		//4.刷出
		os.flush();
		//5.關(guān)閉
		os.close();
	}
}
//接口
class Person implements Serializable{
	private  String name;
	private static int age;
	public Person() {
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

二、File 類

File 類:文件和目錄路徑名的抽象表示形式

提供的功能:操作文件外部的能力,不能操作文件內(nèi)部的內(nèi)容

能夠定義真實(shí)存在的路徑|文件,不在的也可以定義,所以抽象表現(xiàn)形式

構(gòu)造器: File(File parent, String child)   根據(jù) parent 抽象路徑名和 child 路徑名字符串創(chuàng)建一個(gè)新 File 實(shí)例

  File(String pathname)  通過將給定路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建一個(gè)新 File 實(shí)例

File(String parent, String child)   根據(jù) parent 路徑名字符串和 child 路徑名字符串創(chuàng)建一個(gè)新 File 實(shí)例

看完上述內(nèi)容,你們對java中的IO流的種類有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


文章標(biāo)題:java中的IO流分為哪幾類
網(wǎng)頁路徑:http://weahome.cn/article/gcsspc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部