Java IO流

IO流

​ IO流可以看成是不同存储设备(例如磁盘文件,内存等)之间的数据(输入输出操作)流。

IO流分类

​ IO流的常见分类标准是按照流动方向操作数据单位来 分类

按照数据流动方向分类

​ 输入流(InputStream,Reader)和输出流(OutputStream,Writer)

按照操作数据的单位分类

​ 字节流(InputStream,OutputStream)和字符流(Reader,Writer)

字节流

文件输入流(FileInputStream)

构造方法

​ FileInputStream(File file) 表示从file指向的文件中读取

​ FileInputStream(String name) name表示文件的路径名(路径+文件名)

读取的方法
		int read() 
				调用一次读到一个数据字节,返回的int值就是读到的数据
				如果已到达文件末尾,则返回 -1		 	
	 	int read(byte[] b) 
				调用一次本方法表示可以读取多个数据
				读到的内容保存传入的byte数组b中
				返回的是本次调用方法读到的数据字节个数
		int read(byte[] b, int off, int len) 
				和上面的第二个类似,可以指定从b数组什么位置开始装

读取单个数据字节
public static void main(String[] args) throws IOException {
		FileInputStream fileInputStream = new FileInputStream("E:/java/java.txt");
		System.out.println(fileInputStream.read());
		System.out.println((char)fileInputStream.read());
	}
用循环读取整个文件内容
public static void main(String[] args) throws IOException {
    FileInputStream fileInputStream = new FileInputStream("E:/java/java.txt");
    int i;
    while((i = fileInputStream.read()) != -1){
        System.out.println((char)i);
    }
一次读取一个数组
public static void main(String[] args) throws IOException {
    FileInputStream fileInputStream = new FileInputStream("E:/java/java.txt");
    byte[] b = new byte[5];
    int len;
    while((len = fileInputStream.read(b))!=-1){
        for (byte c : b) {
            System.out.println((char)c);
        }
    }
}
直接以byte数组为参数来new一个字符串
public static void main(String[] args) throws IOException {
    FileInputStream fileInputStream = new FileInputStream("E:/java/java.txt");
    byte[] b = new byte[5];
    int len;
    while((len = fileInputStream.read(b))!=-1){
        System.out.println(new String(b,0,len));
    }

文件输出流(FileOutputStream)

构造方法
FileOutputStream(File file) 
FileOutputStream(String name)
FileOutputStream(File file, boolean append) 
FileOutputStream(String name, boolean append)
方法
void write(int b)			调用一次写入一个数据字节
void write(byte[] b)    		调用一次,可以把一个byte数组中的数据写入
void write(byte[] b, int off, int len)  	调用一次,把b数组中的一部分数据写入
写入单个数据
OutputStream os = new FileOutputStream("E:/java/java.txt");
os.write(65);
os.close();
写入字符串
OutStream os = new FileOutputStream("E:/java/java.txt");
os.write(66666.getByte());
注意事项
  1. 确定输出目录

  2. 创建输出流的对象(调用输入write方法)

  3. 调用write方法写数据

  4. 关闭流资源(不关闭也能成功写入)

字符流

文件输入流(FileReader)

​ 构造方法和方法和字节流输入流FileInputStream非常类似 ,差别就是单位是char

Reader r = new FileReader("D:/123.txt");
char[] cbuf = new char[3];
int len;
while((len = r.read(cbuf))!=-1){
System.out.println(new String(cbuf,0,len));
}
r.close();

文件输出流(FileWriter)

void write(String str) // 写入字符串。 
void write(String str, int off, int len) //写入字符串的一部分

字符流与字节流的区别

  1. 操作的单位不一样,一个是字节,一个是字符
  2. 操作中文的时候使用字符流更方便, 字节流更广泛:文本,视频,音频,图片…
  3. 字符流中有可以直接写字符串的方法
  4. 字节输出流 : 程序 —> 磁盘文件 如果不关闭流也会写入
  5. 字符输出流 :程序 —> 缓冲 —> 磁盘文件 如果不关闭流或者刷新缓冲区,不会写入文件
  6. 字符输出流,关闭的时候会先刷新,关闭之后不能够在操作,刷新之后可以继续操作
  7. 什么时候会用到刷新 : 写入的数据,比较多,可以在中途手动调用刷新的方法提交数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值