I/O流

本文详细介绍了Java中I/O流的基本概念及分类,并通过实例演示了如何使用FileInputStream/FileOutputStream进行文件读写,同时展示了字符流FileReader/FileWriter的用法。
摘要由CSDN通过智能技术生成

流是指一定的介质按照一定的方向流动的行为,在软件开发中指的是存储的数据的流动过程,这个数据源可以是硬盘中的文件、内存或者是网络中的某个URL。
I/O流专门用于软件开发层面的理解,把数据从一个存储介质写出(output)或者读取(input)到另外一个存储介质的过程表示为I/O流的模型。

(1)在硬件层面:I/O(input/output),即输入/输出。每个设备都会有一个专用的I/O地址,用来处理自己设备的输入输出信息。比如电脑设备输入端口为键盘和鼠标,输出端口为显示屏。

(2)在软件层面:I/O即不同存储机制上的数据的读入写出。比如内存读写硬盘中的数据或者U盘中的数据。

1、流根据传输数据类型的不同可分为字节流和字符流两大类。

读取和写入数据的时候,以字节为最小单元进行读取和写入操作是字节流。

读取和写入数据的时候,以字符为最小单元进行读取和写入操作,因为每个字符根据编码不同,所占用的字节个数不同,每次读取和写入字符时候,是不定长的字节个数写入读取是字符流。

2、流根据传输数据方向的不同可分为输入流和输出流两大类。

把数据从其他存储机制读入到当前内存机制当中叫输入流

把内存当中的数据写出到其他存储机制当中叫输出流

InputStream会派生出很多子类,在这里,我们具体介绍一下FileInputStream,具体方法有以下几种

package file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileText {
	public static void main(String[] args) {
		FileText ft = new FileText();
//		ft.readFilel();
		ft.readFile2();
	}
	public void readFilel(){
		try {
			FileInputStream fis = new FileInputStream("新建文本文档.txt");
			int size = fis.available();
			System.out.println("流中剩余字节流:"+size);
			int value = fis.read();
			while(value!=-1){
				char c = (char)value;
				System.out.print(c);
				value = fis.read();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void readFile2(){
		try {
			FileInputStream fis = new FileInputStream("新建文本文档.txt");
			byte[] bytes = new byte[10];
			int value = fis.read(bytes);
			while(value != -1){
				String str = new String(bytes,0,value);				
				System.out.print(str);
				value = fis.read(bytes);
			}
			fis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


FileOutputStream的具体方法如下


package file1;

import java.io.FileOutputStream;

public class FileText1 {
	public static void main(String[] args) {
		FileText1 fot = new FileText1();
		fot.writeFile1();
	}

	public void writeFile1(){
		try {
			FileOutputStream fos = new FileOutputStream("输出流测试文件.txt",false);
			fos.write(65);
			fos.flush();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void writeFile2(){
		try {
			FileOutputStream fos = new FileOutputStream("输出流测试文件.txt");
			byte[] bytes = {48,49,50,51,2,4,7,9,10};
			fos.write(bytes,1,3);
			fos.flush();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void writeFile3(){
		try {
			FileOutputStream fos = new FileOutputStream("输出流测试文件.txt");
			String value = "南华大学计算机专业";
			byte[] bytes = value.getBytes();
			fos.write(bytes);
			fos.flush();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	

}


字符流Reader同样会派生出很多实现子类,下面我们具体介绍一下FileReader,它的方法有以下几种


package file2;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class ReaderTest {
	public static void main(String[] args) throws Exception {
		ReaderTest rt = new ReaderTest();
		rt.charRead1();
	}
	public void charRead() throws Exception{
		FileReader fr = new FileReader("C:\\Users\\hhhh\\Desktop\\1.txt");
		int value = fr.read();
		while (value!=-1) {
			System.out.print((char)value);
			value = fr.read();
		}
		fr.close();
	}
	public void charRead1() throws Exception{
		FileReader fr = new FileReader("C:\\Users\\hhhh\\Desktop\\1.txt");
		char[] chars = new char[10];
		int value = fr.read(chars);
		while (value!=-1) {
			String str = new String(chars,0,value);
			System.out.print(str);
			value = fr.read(chars);
		}
		fr.close();
	}
}


Writer的派生实现子类FileWriter的方法有以下几种

package file2;

import java.io.FileWriter;
import java.io.IOException;

public class WriterTest {
	public static void main(String[] args) throws Exception {
		WriterTest wt = new WriterTest();
		wt.writeFile();
	}
	public void writeFile() throws Exception{
		FileWriter fw = new FileWriter("C:\\Users\\hhhh\\Desktop\\1.txt");
		for (int i = 30000; i < 30100; i++) {
			fw.write(i);
		}
		fw.flush();
		fw.close();
	}
	public void writeFile1() throws Exception{
		FileWriter fw = new FileWriter("C:\\Users\\hhhh\\Desktop\\1.txt");
		String str = "南华大学";
		char[] chars = str.toCharArray();
		fw.write(chars);
		fw.write(str);
		fw.flush();
		fw.close();
	}
}

另外简单介绍一下 OutputStreamReader和FileOutputStream以及InputStreamReader和FileInputStream的搭配用法

package file2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class TanceTest {
	public static void main(String[] args) throws Exception {
		TanceTest tt = new TanceTest();
		tt.writeFile();
	}
	public void readFile() throws Exception{
		FileInputStream fis = new FileInputStream("C:\\Users\\hhhh\\Desktop\\1.txt");
		InputStreamReader isr = new InputStreamReader(fis);
		int value = isr.read();
		while(value!=-1){
			System.out.print((char)value);
			value = isr.read();
		}
	}
	public void writeFile() throws Exception{
		FileOutputStream fos = new FileOutputStream("C:\\Users\\hhhh\\Desktop\\123.txt");
		OutputStreamWriter osw = new OutputStreamWriter(fos);
		osw.write(20000);
		osw.flush();
		osw.close();
	}
}
分别调用两个方法的结果为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值