IO流总结,字符流,字节流,字节缓冲流,字节缓冲流,超级详细!!!

IO流的总结

1.前言

首先IO流分为字节流和字符流。

要搞清楚以下要点:

  • 如何创建一个文件
  • 如何创建一个文件夹

2.File 类

2.1.如何创建创建一个文件对象

File f1 =new File(“绝对路径”);

那么绝对路径相信大家应该都清楚,不清楚的,可以搜索一下。

例如:

File f1 = new File("E:\\itcast\\java.text");

这样我们就创建了一个File 对象

但是,并不能生成文件,还需要以下操作

2.2.如何创建一个文件,一个文件夹,文件夹中还有文件夹

1、创建一个文件

接着上面的File对象

File f1 = new File("E:\\itcast\\java.text");
f1.createNewFile();//不出意外,你可以在“E:\\itcast”这个路径下,找到java.text这样一个文件

2、创建一个文件夹

File f2 = new File("E:\\itcast\\java");
f2.mkdir();//不出意外,你可以在“E:\\itcast”这个路径下,找到java这样一个文件夹
//注意:即使写成这样File f2 = new File("E:\\itcast\\java.txt");  mkdir()创建的仍然是一个文件夹而不是txt文件

3、创建多级目录

File f3 = new File("D:\\itcast\\JavaWEB\\HTML");
f3.mkdirs();//不多赘述你懂的

3.字节流

那么我就简单的写一下

3.1.输出流

那么何为输出流?

那就是,可以在文件中写东西。

那么三步走,走起来:

  • 首先创建一个文件
  • 然后再文件里写东西
  • 然后释放资源

上代码!

FileOutputStream fos =new FileOutputStream("D:\\itcast\\sb.txt");
/*这一句话很强大,做三件事
但我认为最重要的一个件事就是,创建了文件。*/
fos.write(97);//写文件,这里的97代表着ASCII码,也就是字母“a”

fos.close();//关闭文件,释放资源,完美结束。

3.2 写数据的三种方式

write( );

这个括号里面可以放三种数据:

1、上代码

fos.write(97);//跟之前的一样,不多赘述

2、上代码

byte [] bys = {97,98,99,100};
fos.write(bys);//显而易见,文件中会显示,abcd

3、上代码!

byte [] bys = {97,98,99,100};
fos.write(bys,1,3)//1,3代表什么呢?就是数组下标,从bys第1个元素开始写一直到第3个元素,那么输出为bcd

那么问题来了,我还能抱着ASCII码,来写数据么?

3.3 获取字符串的ASCII码

上代码!

byte[]bys1 = "abcd".getBytes();
fos.write(bys1);//通俗易懂的操作,你应该懂我

3.4 那么写数据如何换行?

很简单看我的操作

fos.write("abcd".getBytes());
fos.write("\n".getBytes());
fos.write("abcd".getBytes());//这不就换行了

3.5. 那么一个文件写完,下次再想写,怎么接着往后写?

FileOutputStream f1 =new FileOutputStream("D:\\itcast\\sb.txt",true);
//加一个true完美解决,再写文件就可以接着上次的写了,
//如果不加true ,会从头开始写,会覆盖掉上次写的。

3.6 输出流(一次读取一个字符,一次读很多个字符)

那么直接上代码吧!

1、一次读一个字符

FileInputStream fis =new FileInputStream("D:\\itcast\\fos2.txt");
//这句话就是简单的创建一个输出流对象,如果文件不存在还会报错
int by = fis.read();
System.out.println((char)by);//可以看出read()返回的是字符的ACII码;
//那么将整个文件读取下来,如何做?
int by;
while((by = fis.read())!=-1) {
			System.out.print((char)by);
		}
fis.close();//不要忘记关闭资源

2、一次读很多个字符

byte[ ] bys = new byte[1024];//存储1024个字节的编码
int len;//读取的字节长度
//也就是说,读取的字节码存储在了bys中,而不是len,len仅仅是字节码的长度,也就是bys中元素的个数
while((len=fis.read(bys))!=-1) {
		System.out.println(new String(bys,0,len));//转换一下输出出去
}

3.7 字节缓冲流

由名字可以看出,就是用来缓冲的,其实并没有这么简单。

但是我们只需要会用即可,想要了解其中的原理,看其他的文章

2.7.1 输出流

上代码!

BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream("D:\\itcast\\fos.txt"));//很通俗易懂。
//把这个“字节输出流” 传进 “字节缓冲输出流”后,其他操作跟字节输出流一样
//那我们就假装写点东西进去
bos.write("hello\n".getBytes());
bos.close();//操作一毛一样

2.7.2 输入流

直接上代码!

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\itcast\\fos.txt"));
//一次读一个字节数据
		int by;
		while((by = bis.read())!=-1) {
			System.out.print((char)by);
		}
//一次读好多个字节数据
byte[] bys = new byte[1024];
		int len;
		while((len = bis.read(bys))!=-1) {
			System.out.print(new String(bys,0,len));
		}
bis.close();//完美,很简单,没有任何区别

4.字符流

4.1 字符流输出的5种方式

我们要用到的函数

write( ) flush( ) close( )

我们看到了一个新函数flush( ),其实这个是刷新流,就是用来刷新的,后面再说

那么上代码!

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\itcast\\wo1.txt"));//跟缓冲流一个道理,就是把这字节输出流传进去,然后操作都一样
//第一种输出
osw.write(97);
osw.flush();//哎!我们就用到这个刷新流了,不刷新这个字符就不显示在文件里,刷新后就显示了
//第二种输出
char [] chs ={'a','b','c'};
osw.write(chs);//通俗易懂
//第三种输出
osw.write(chs,0,2);//0和2代表着chs的数组下标
//第四种输出
osw.write("abcdef");
//第五种输出
osw.write("abcdef",0,3);//这个0和3不用我解释了吧
//最后!!!!!!很重要!!!!!!!!!刷新一下,一定要刷新
osw.close();//这个函数又可以刷新又可以关闭文件,非常棒!完美!

4.2 字符流读数据的2种方式

上代码!

InputStreamReader  isr = new InputStreamReader(new FileInputStream("D:\\itcast\\wo1.txt"));
//一次读一个字符数据
int ch;
		while((ch = isr.read())!=-1) {
			System.out .print((char)ch);
		}
//一次读很多个字符数据
char[] chs = new char[1024];
int len;
while((len = isr.read(chs))!=-1) {
		System.out.print(new String(chs, 0,len));
}
//一毛一样的操作,不再赘述
isr.close();

4.3 字符缓冲流的读数据,写数据

1、写数据

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\itcast\\fos.txt")));
//是不是感觉非常的麻烦这样写
//那么就简化一下
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\itcast\\fos.txt"));
//其实FileWriter就是OuterputStreamWriter的子类
//写起数据来!!
bw.write("hello\n");
bw.write("hahahha");
		
bw.close();

2、读数据

BufferedReader br = new BufferedReader(new FileReader("D:\\itcast\\fos.txt"));
//正常操作
//一次读一个字符数据
int ch;
		while((ch = br.read())!=-1) {
			System.out .print((char)ch);
		}
//一次读很多个字符数据
char[] chs = new char[1024];
int len;
while((len = br.read(chs))!=-1) {
		System.out.print(new String(chs, 0,len));
}
//一毛一样的操作,不再赘述
isr.close();

4.4.字符缓冲流特有功能

1、写数据的换行操作newLine( )

上代码!

BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\itcast\\fos.txt"));
		for(int i = 0;i<10;i++) {
			bw.write("hello"+i);
			//bw.write("\n");
        	bw.newLine();//这个操作跟bw.write("\n");这个操作一样
			bw.flush();
		}

2、读数据,一次读一行操作readLine( )

BufferedReader br = new BufferedReader (new FileReader("D:\\itcast\\fos.txt"));
String line;
while((line = br.readLine())!=null) {
	System.out.println(line);
}		
br.close();

完结!撒花!!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值