黑马程序员_IO

  

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

  IO流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式。Java用于操作流的对象都在IO包中。流按操作数据分为两种:字节流与字符流 。流按流向分为:输入流,输出流。

  IO流常用基类。字节流的抽象基类:InputStream ,OutputStream。字符流的抽象基类:Reader ,Writer。由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。如:InputStream的子类FileInputStream。如:Reader的子类FileReader。

  有了垃圾回收机制为什么还要调用close方法进行关闭。 

  垃圾回收器只能处理java虚拟机所产生的内存垃圾 而流所消耗的操作系统资源、硬件、网络资源等的外部资源 这不是java虚拟机能管的 当然也不是垃圾回收器能处理的

  为什么IO异常一定要处理。

  io就是要读取外部的数据,而你又无法确定知道读进来的一定是程序能正确处理的数据,所以要try catch

  创建流对象,建立数据存放文件FileWriter fw = new FileWriter(“Test.txt”);

  调用流对象的写入方法,将数据写入流fw.write(“text”);

  关闭流资源,并将流中的数据清空到文件中。fw.close();

  字符流——读取文件

  建立一个流对象,将已存在的一个文件加载进 流。

  FileReader fr = new FileReader(“Test.txt”);

  创建一个临时存放数据的数组。

  char[] ch = new char[1024];

  调用流对象的读取方法将流中的数据读入到数组 中。

  fr.read(ch);

  完整代码

  FileReader fr = null;

  try{

fr = new FileReader("c:\\test.txt");

char[] buf = new char[1024];

int len= 0;

while((len=fr.read(buf))!=-1){

System.out.println(new String(buf,0,len));

   }

  }

  catch (IOException e){

System.out.println("read-Exception :"+e.toString());

  }

  finally{

if(fr!=null){

try{

fr.close();

}

catch (IOException e){

System.out.println("close-Exception :"+e.toString());

}

}

  注意:

  定义文件路径时,可以用“/”或者“\\”。

  在创建一个文件时,如果目录下有同名文件将被覆盖。

  在读取文件时,必须保证该文件已存在, 否则出异常。

  字符流的缓冲区的出现提高了对数据的读写效率,对应类BufferedWriter和BufferedReader。缓冲区要结合流才可以使用。在流的基础上对流的功能进行了增强。

  装饰设计模式,对原有类进行了功能的改变,增强。装饰模式与类继承的区别:装饰模式是一种动态行为,对已经存在类进行随意组合,而类的继承是一种静态的行为,一个类定义成什么样的,该类的对象便具有什么样的功能,无法动态的改变。

  字节流,基本操作与字符流类相同,但它不仅可以操作字符,还可以操作其他 媒体文件

  字节流的缓冲区,同样是提高了字节流的读写效率。

  转换流,InputStreamReader,OutputStreamWriter。转换流是字符流与字节流之间的桥。方便了字符流与字节流之间的操作

  转换流的应用:字节流中的数据都是字符时,转成字符流操作更高效。

  标准输入输出流。System类中的字段:in,out。它们各代表了系统标准的输入和输出设备。默认输入设备是键盘,输出设备是显示器。System.in的类型是InputStream。System.out的类型是PrintStream是OutputStream的子类FilterOutputStream 的子类.

  通过System类的setIn,setOut方法对默认设备进行改变。System.setIn(new FileInputStream(“1.txt”));//源改成文件1.txtSystem.setOut(new FileOutputStream(“2.txt”));//将目的改成文件2.txt

  因为是字节流处理的是文本数据,可以转换成字符流,操作更方便。

  BfferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

  BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

  File类,用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作.File对象可以作为参数传递给流的构造函数。

  递归,函数自己调用自己。注意:递归时一定要明确结束条件。应用场景:当某一功能要重复使用时。

 RandomAccessFile随机访问文件,自身具备读写的方法。通过skipBytes(int x),seek(int x)来达到随机访问。管道流PipedInputStream和PipedOutputStream输入输出可直接进行连接,通过结合线程使用。

 打印流PrintWriter与PrintStream,可以直接操作输入流和文件。

 序列流SequenceInputStream,对多个流进行合并。

 操作对象ObjectInputStream与ObjectOutputStream,被操作的对象需要实现Serializable (标记接口);l

  操作基本数据类型DataInputStream与DataOutputStream

  操作字节数组ByteArrayInputStream与ByteArrayOutputStream

  操作字符数组CharArrayReader与CharArrayWrite

  操作字符串StringReader 与StringWriter

  字符流的出现为了方便操作字符。更重要是的加入了编码转换。通过子类转换流来完成。InputStreamReader和OutputStreamWriter,在这两个对象进行构造的时候可以加入字符 集。

   计算机只能识别二进制数据,早期由来是 电信号。为了方便应用计算机,让它可以识别各个 国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。这就是编码表。

   常见的编码表:ASCII:美国标准信息交换码。用一个字节的7位可以表示。ISO8859-1:拉丁码表。欧洲码表用一个字节的8位表示。GB2312:中国的中文编码表。GBK:中国的中文编码表升级,融合了更多的中文文字符号。Unicode:国际标准码,融合了多种文字。所有文字都用两个字节来表示,Java语言使用的就是unicode。UTF-8:最多用三个字节来表示一个字符。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值