IO

在这里插入图片描述
1、字节流:处理除了文本、文字相关所有的流问题
2、字符流:只处理文本、文字相关(处理编码乱码问题)
3、转换流:已经有了字节流,以字符流的方式读取或写出文本相关的数据
4、缓冲流:提高读取和写出效率,以后都用
5、随机访问文件类RandomAccessFile:随机访问、读取文件内容,如:断点续传、多线程上传下载、判断空间是否充足,占用空间

================================================================

字节流

	public static void main(String[] args) {
		FileOutputStream fileOutputStream = null;//输出流:内存到硬盘
		FileInputStream fileInputStream=null;//输入流:硬盘到内存
		
		try {
			fileInputStream = new FileInputStream("test.txt");//要复制的文件
			fileOutputStream = new FileOutputStream("test2.txt");//复制去的文件
			
			byte[] b=new byte[10];//长度则指定一次读取数据的长度,数组用来装每次读取的数据
			int read=1;//保存每一次读取的字节个数,用在条件判断中
			while ((read=fileInputStream.read(b)) !=-1) {
				fileOutputStream.write(b, 0, read);//边读边写
			}
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			IOCloseDutil.close(fileOutputStream, fileInputStream);
		}
	}

关流:先开后关,
为什么关?:将内存中的数据强制写出,否则会出现只传输部分数据的情况

	/**
	*	这里用父类关,增强扩展性
	*/
	public static void close(OutputStream fileOutputStream, InputStream fileInputStream) {
		try {
			if(fileInputStream !=null)
				{
					fileInputStream.close();
				}
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if(fileOutputStream !=null)
				{
					fileOutputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

================================================================

字符流

	public static void main(String[] args) {
		try (//关流新方式,jdk7开始,不用再写final代码块
			FileReader	fr = new FileReader("test.txt");
			FileWriter fw = new FileWriter("test3.txt");
		){
			char[] b=new char[1024];
			int read=1;
			while ((read=fr.read(b)) !=-1) {
				fw.write(b, 0, read);//边读边写
			}
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

===============================================================

转换流
学习中目前唯一一个可以设置字符集的流

		OutputStreamWriter osw = null;
		InputStreamReader isr = null;
		try {
			isr = new InputStreamReader(is,"UTF-8");//转换流,设置字符集为UTF-8
			osw = new OutputStreamWriter(os,"UTF-8");
			
			char[] c=new char[1024];//把字节流转换为了字符流,所以应该是char[]数组,而不是byte[]数组
			int read=0;
			while ((read=isr.read(c)) != -1) {
				osw.write(c, 0, read);
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			IOCloseDutil.close(isr, osw);
		}

==================================================================
缓冲流
提高读取和写出效率
字符输入缓冲流的特殊方法:readLine(),读一行
字符输出缓冲流的特殊方法:newLine(),换行

	public static void main(String[] args) {
		
		try (
			//声明一个FileReader对象赋值为null,为了在finally中关闭流
			FileReader fr = new FileReader("day021-io笔记.txt");
				
			//声明FileWriter对象,在try赋值创建的对象
			FileWriter fw = new FileWriter("copyTxt4.txt");
			//创建BufferedReader对象,将fr传入	
			BufferedReader br = new BufferedReader(fr);
			
			//创建BufferedWriter对象,将fw传入	
			BufferedWriter bw = new BufferedWriter(fw);
		){
			//调用BufferedReader中的readLine方法,读取一行数据
			String readLine = null;
			int count=0;
						
			while ((readLine =	br.readLine()) != null) {//每次循环读取的数据,装到readLine,当时null,表示读取结束了
				count++;
				//先换行,再写出
				if (count >1) //第一次不换行,不然复制的文件会比原文件多一行
					bw.newLine();//输出一个换行符
				bw.write(readLine);//调用BufferedWriter中的write方法,读取一行数据
			}	
			System.out.println("文件复制成功!");
		} catch (FileNotFoundException e) {
			System.out.println("文件找不到异常!");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("IO异常!");
			e.printStackTrace();
		} 
	}

===============================================================

随机访问文件类RandomAccessFile
有文件指针概念,从指针开始写

作用:
1.断点续传
2.判断空间是否充足,先占空间
3.多线程上传下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值