黑马程序员 IO笔记

本文深入探讨了Java中IO流的基本概念及其应用。介绍了字符流与字节流的主要操作方法,如read、write、flush等,并详细讲解了FileReader、FileWriter、BufferedReader等类的使用方法。此外,还涉及了文件复制的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

IO: input output io流用来处理设备之间的数据传输
java通过对数据的操作是通过流的方式
java用于操作流的对象都在IO包中

字符流的操作(Reader和Writer的子类的操作)(在实例化一个文件时如果目录下存在同名的文件,则将文件覆盖掉)
   (一)1、Writer中最重要的方法:append、flush、close、writer
       (1)、append是在输出流中追加相应的内容,其参数为    CharBuffer, Segment, String, StringBuffer, StringBuilder类型或者为char类型
       (2)、flush是将内存流中的数据刷新到文件中
       (3)、close现在刷新内存数据,然后将流关闭
       (4)、writer将内容写入内存输出流中(该方法有几个重载方法实现了想输出流中写入的内容:字符,字符串,可以指定开始和长度的字符串,整型数据     write(int c)是将c对应的字符写入输出流)
     2、Writer的子类    BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter
            (1)、OutputStreamWriter 的子类FileWriter类通过File来创建字符输出流;
          FileWriter(String fileName, boolean append)当append为true时将数据写入文件末尾(文件不存在时创建新文件,存在时文件将内容写入文件末尾)
            (2)、BufferedWriter将Writer的功能提高(利用字符流的缓冲技术)提供了newLine(),提供跨平台的换行方法
  (二)1、Reader读取文件中的内容,其中主要的方法:read,close,skip
      (1)、read读取流中的内容,read()一次只读取一个字符,并用int类型来存储,可以强制类型转化为字符;read(char[] ch)读取字符并存入字符串中,返回读取的内容长度
             (2)、close关闭读取流操作
      (3)、skip跳过多少字节在读取文件内容
     2、Reader类的子类主要有BufferedReader,FileReader,InputStreamReader。。。。。。
              (1)、FileReader文件读取流操作过程为:
            //创建一个文件读取流,和指定名的文件相关联
            //要保证文件已存在,如果不存在,将抛出FileNotFoundException
            Reader rd = new FileReader(new File("aa.txt"));
            //调用读取流对象的read方法read()只读取一个字符read(char[] ch)读取字符串,并返回读取的长度read(char[] cbuf, int off, int len)
            //读取一定长度的内容存到buf中
            int i = rd.read();
            //当文件读到最后,返回-1
       (2)、BufferedReader它可以一次读取大量的数据(利用字符流的缓冲技术),读取一行的内容用readline()方法是本类对Reader的扩充
           readLine()读到文件末尾时返回null,这样可以迭代文件中的所有信息(返回一行的有效数据,不包含换行)
           readLine()原理:利用Reader的read()方法将字符一个一个从文件中读取出来,并将其存入一个特定的数组中,如果遇到\r\n将其删除并将数组返回
                   (创建自己的带有缓冲区的reader类:思路就是利用FileReader的read()方法读取数据并将其加入StringBuilder对象中,遇到\r\n时返回StringBuilder对象即可,同时实现流的关闭操作)
      (3)、LineNumberReader是一个带有行号的读取流操作,用getLineNumber方法可以得到行号,也可以用setLineNumber方法设置当前的行号
           
  (三)文件的复制
           主要思想就是源文件读取字符,并将其写入目的文件
     1、可以通过一个字符读取并将其写入目的文件这样经过很多次读取写入
     2、将很多字符限读入内存,一次将很多字符写入目的文件
     3、使用BufferedReader的readLine(),用BufferedWriter的相应操作将一行的数据写入目的文件,可以用newLine()插入一个换行    
   (四)装饰设计模式
            当想要对已有的对象的功能加强,可以定义个类,将已有的类作为成员变量传入到新的类,基于已有的功能,并提供加强的功能的创建  ,这样创建的类为原有类的装饰类
  (五)、字节流的写操作InputStream
       InputStream相当于文件的Reader类(只是它是以字节格式来操作文件,内存),但它提供一个available()表示文件的长度
   (六)、字节流的读操作OutputStream  
        OutputStream从文件中读取内容的类,该类主要以字节的格式写文件或写到内存中
                   注:如何将字符串转化为字节数组,“字符串”.getByte();
      练习:图片的复制,
            图片的复制主要通过文件的字节流操作实现,先从原始文件读取字节,将其写入目标文件

          

package two;
import java.io.*;
public class CopyJpg {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileOutputStream fos=null;
		FileInputStream fis=null;
		
		try {
			fos=new FileOutputStream("D:\\1.jpg");
			fis=new FileInputStream("D:\\31.jpg");
			byte[] b=new byte[1024];
			int len=0;
			while((len=fis.read(b)) !=-1){
				//System.out.print(b);查看存入的数据
				fos.write(b,0,len);
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				if(fis !=null)
				fis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(fos !=null)
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
		
	}

}



            注:在对文件用流操作时,为了却保文件流被正常关闭,应将文件的关闭放在finally里处理

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值