IO流

1.IO流

    在java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”,通过流的方式允许java程序使用相同的方式来访问不同的输入/输出源。

1.1流的分类

按照不同的分类方式,可以将流分为不同类型。

(1)输入流和输出流

按照流的流向来分,可以分为输入流和输出流。

    输入流:只能从中读取数据,而不能向其写入数据。

    输出流:只能向其写入数据,而不能从中读取数据。

这里的输入、输出都是从程序运行所在内存的角度来划分的。数据从内存到硬盘,通常称为输出流。

1.2字节流和字符流

    字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同。字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符。

    字节流主要由InputStream和OutputStream作为基类,而字符流则主要由Reader和Writer作为基类。

1.3节点流和处理流

    可以从/向一个特定的IO设备(如磁盘/网络)读/写数据的流,称为节点流,节点流也被称为低级流。

    处理流用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读写功能。处理流也被称为高级流。(java使用处理流来包装节点流是一种典型的装饰器设计模式,通过使用处理流来包装不同的节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入/输出功能。)

2.字节输出流OutputStream

OutputStream此抽象类,表示输出字节流所有类的父类,操作的数据都是字节。


2.1FileOutputStream

FileOutputStream类,即文件输出流,是用于将数据写入File的输出流。

构造方法:


2.2FileOutputStream写入数据到文件中

示例:

package com.xupt.fos;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStream01 {

	public static void main(String[] args) throws IOException {
		File file=new File("F:\\AAA\\aa.txt");
		
		FileOutputStream fos=new FileOutputStream(file);
		
		fos.write("既然选择了远方,那么留给世界的只能是背影".getBytes());
		fos.close();

	}

}

3.字节输入流InputStream

InputStream此抽象类,是表示字节输入流的所有类的父类,定义了字节输入流的基本共性功能方法。

    int read():读取一个字节并返回,没有字节返回-1.

    int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。

3.1FileInputStream

FileInputStream 从文件系统中的某个文件中获得输入字节。

构造方法:


3.2 FileInputStream读取数据

在读取文件中的数据时,调用read方法,实现从文件中读取数据。

(1)一次读取一个字节

示例:

package com.xupt.fos;

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

public class FileInputStream01 {

	public static void main(String[] args) throws IOException {
		File file=new File("F:\\AAA\\a.txt");
		
		FileInputStream fis=new FileInputStream(file);
		int len=0;
		while((len=fis.read())!=-1){
			System.out.print((char)len);
		}
		fis.close();

	}

}

(2)一次读取一个字节数组

package com.xupt.fos;

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

public class FileInputStream02 {

	public static void main(String[] args) throws IOException {
		File file=new File("F:\\AAA\\a.txt");
		
		FileInputStream fis=new FileInputStream(file);
		byte[] b=new byte[1024];
		int len=0;
		
		while((len=fis.read(b))!=-1){
			System.out.println(new String(b,0,len));
		}
		
		fis.close();

	}

}
3.3复制文件

方式一:

package com.xupt.fos;

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

public class copyFile {

	public static void main(String[] args) throws IOException {
		File srcFile=new File("F:\\AAA\\a\\1.jpg");
		File destFile=new File("F:\\AAA\\b\\1.jpg");
		
		FileInputStream fis=new FileInputStream(srcFile);
		FileOutputStream fos=new FileOutputStream(destFile);
		int len=0;
		while((len=fis.read())!=-1){
			fos.write(len);
		}
		
		fos.close();
		fis.close();

	}

}

方式二:

package com.xupt.fos;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class copyFile02 {

	public static void main(String[] args) throws IOException {
		File srcFile=new File("F:\\AAA\\a\\2.jpg");
		File destFile=new File("F:\\AAA\\b\\2.jpg");
		
		FileInputStream fis=new FileInputStream(srcFile);
		FileOutputStream fos=new FileOutputStream(destFile);
		//定义一个缓冲区
		byte[] b=new byte[1024];
		int len=0;
		while((len=fis.read(b))!=-1){
			//将数组中的指定长度的数据写入到输出流中
			fos.write(b,0,len);
		}
		
		fos.close();
		fis.close();

	}

}

4.字符输入流Reader

Reader是字符输入流的抽象父类,本身并不能创建实例来执行输入。


     read():读取单个字符并返回

     read(char[]):将数据读取到数组中,并返回读取的个数。

4.1FileReader

构造方法:


FileReader读取文本文件:

package com.xupt.reader;

import java.io.FileReader;
import java.io.IOException;

public class FileReaderTest01 {

	public static void main(String[] args) throws IOException {
		FileReader fr=new FileReader("a.txt");
		
		int len=0;
		while((len=fr.read())!=-1){
			System.out.print((char)len);
		}
		
		fr.close();
	}
}

5.字符输出流Writer

Writer是字符输入流的抽象父类,其方法如下:

5.1FileWriter

构造方法:


FileWriter将中文写入文本文件中:

package com.xupt.writer;

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

public class FileWriterTest01 {
	public static void main(String[] args) throws IOException {
		FileWriter fw=new FileWriter("a.txt");
		fw.write("我可以等在这路口,不管你会不会经过");
		fw.flush();
		fw.close();
	}
}
写入字符到文件中,先进行流的刷新,再进行流的关闭。
5.2flush()和close()的区别


    flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。

    close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。

6.字符流复制文本文件


package com.xupt.copy;

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

public class CopyFile {
	public static void main(String[] args) throws IOException {
		FileReader fr=new FileReader("a.txt");
		FileWriter fw=new FileWriter("b.txt");
		
		char[] c=new char[1024];
		int len=0;
		while((len=fr.read(c))!=-1){
			fw.write(c, 0, len);
			fw.flush();
		}
		fw.close();
		fr.close();
		
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值