java基础-- 流

一.字节流

以字节为单位,进行数据的传输
参照物是程序
OutputStream 字节输出流(写文件)
InputStrem   字节输入流(读文件)

以上两个抽象类 是所有字节流的父类.
写文件步骤
1.创建绑定文件
2.创建输出流 并绑定文件
3.写文件
4.关闭流资源

//创建file(给输出流绑定一个文件)
//给出路径,可以没有该文件 (系统会帮你创建出来)
//创建文件字节输出流
File file = new File("/Users/lanou/Desktop/test/sdafs.txt");
FileOutputStream fos = new FileOutputStream(file);
//写文件
//流这里都是抛的IOException
//传入int值的方法 是按ASCII码输入
//一次写入一个字节
fos.write(49);		
//创建一个字节数组
byte[] bs = {66,67,68,69};
fos.write(bs);
//可以直接写字符串
//字符串转字节数组  getBytes()
//字节数组转字符串  构造方法
fos.write("wanglong".getBytes());
fos.write(bs, 1, 2);
//关闭资源
fos.close();
读文件(需要循环读取)
一次读一字节
int num = 0;
		while((num=fis.read())!=-1) {
			System.out.println((char)num);
		}
		fis.close();
一次多读几个字节
byte[] bs = new byte[2];
int num = 0;
while((num=fis.read(bs))!=-1) {
//直接使用string的构造方法
//将字节数组转换为字符串
System.out.print(new String(bs, 0, num));
}
fis.close();
使用字节流 进行文件的复制(带异常处理)
File file1 = new File("/Users/lanou/Desktop/test/抽奖系统案例.pdf");
		File file2 = new File("/Users/lanou/Desktop/test/p2.pdf");
		FileOutputStream fos = null;
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(file1);
			fos = new FileOutputStream(file2);
		} catch (FileNotFoundException e) {
			throw new RuntimeException("文件找不到");
		}
		byte[] bs = new byte[1024];
		int len = 0;
		//int num = 0;
		try {
			while((len=fis.read(bs))!=-1) {
				fos.write(bs,0,len);
			}
		} catch (IOException e) {
			throw new RuntimeException("读写失败");
		}
		
		finally {
		//先关哪个(读写完毕)
			if (fos!=null) {
				try {
					fos.close();
				} catch (IOException e) {
					throw new RuntimeException("关闭失败");
				}finally {if(fis!=null){
					try {
						fis.close();
					} catch (IOException e) {
						throw new RuntimeException("关闭失败");
					}
                                     }
                                }
                             }
		}
文件的续写
利用构造方法的参数进行续写(布尔参数)
File file = new File("/Users/lanou/Desktop/test/xuxie.txt");
FileOutputStream fos = new FileOutputStream(file,true);

基本的编码格式
mac 默认使用UTF-8格式(通用编码格式)
一个中文字符 占三个字节
windows 默认使用GBK模式(简体中文)
一个中文字符占两个字节

二.字符流

Writer(写文件) 字符输出流
Reader(读文件) 字符输入流

上面两个类是所有字符流父类(抽象类)

写文件

//创建文件字符输出流
File file = new File("/Users/lanou/Desktop/test/dongdong.txt");
FileWriter fw = new FileWriter(file);
//写
fw.write(65);
//刷新
//相当于写入的时候 有一个缓冲区
//写的字符实际上 是先写到缓冲区
//刷新时 才会将写的字符全部写入文件中
//利用字符数组写入
char[] c = {'c','b','a'};
fw.write(c);
//利用字符串写入
fw.write("苟利国家生死以");
fw.flush();
//关闭流资源
//关闭流资源之前 会自动刷新缓冲区
fw.close();
读文件
利用缓冲字符数组读
int len = 0;
char[] cs  = new char[2];
while((len = fr.read())!=-1) {
System.out.println(new String(cs, 0, len));

三.转换流

OutputStreamWriter(字符流通向字节流的桥梁)


 构造方法(不传编码格式 默认使用系统的编码格式)
 1.需要字节输出流
 2.编码格式的名字(UTF-8,GBK 不区分大小写)

InputStreamReader(读取文件 字节流通向字符流的桥梁)
构造方法(不传编码格式 默认使用系统的编码格式)
1.需要字节输入流
2.编码格式的名字

四.缓冲流

内部自带一个缓冲区(字节数组)
BufferedoOutputStream(写文件) 缓冲字节输出流
BufferedoInputStream(读文件)  缓冲字节输入流
构建一个缓冲流写文件
FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/test/guifen.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write("guifen".getBytes());
bos.close();
构建一个缓冲读文件
FileInputStream fis = new FileInputStream("/Users/lanou/Desktop/test/guifen.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
int len = 0;
byte[] bs = new byte[1024];
while((len=bis.read(bs))!=-1) {
System.out.println(new String(bs, 0, len));
}
bis.close();



猜你喜欢

转载自blog.csdn.net/hehanhh/article/details/80499381