黑马程序员__java基础__IO流(字节流、字符流)
2015-06-15 17:06
656 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
IO流
一.概述
(1)IO流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式。Java用于操作流的对象都在IO包中。
(2)流按操作数据分为两种:字节流和字符流。
1.字节流:InputStream和OutputStream
2.字符流:Reader和Writer
(3)流按流向分为:输入流和输出流。
1.输入流:InputStream和Reader
2.输出流:OutputStream和Writer
字符流
一.字符流的描述
(1)字符流中的对象融合了编码表。使用的是默认的编码,即当前系统的编码。
(2)字符流只用于处理文字数据,而字节流可以处理媒体数据。
二.字符流的读写
(1)写入字符流步骤:
1.创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将 被覆盖。其实该步就是在明确数据要存放的目的地。
2.调用write(String s)方法,将字符串写入到流中。
3.调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。
4.调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据,并将数据刷新到目的地中。
例子:
1.创建一个文件读取流对象,和指定名称的文件相关联。要保证该文件已经存在,若不存在,将会发生异常。
2.调用读取流对象的read()方法。read():一次读一个字符,且会继续往下读。
第一种读取方式:使用read()方法读取文本文件数据。
第二种读取方式:使用read(char[])方法读取文本文件数据。
3.读取后要调用close方法将流资源关闭。
read()方法:
(1)缓冲区的出现提高了对数据的读写效率。所以在缓冲区创建前,要先创建流对象。即先将流对象初始化到构造函数中。
(2)缓冲技术原理:此对象中封装了数组,将数据存入,再一次性取出。
(3)写入字符流缓冲区步骤:
1.创建一个字符写入流对象。
2.将字符写入流对象作为参数传递给缓冲区的构造函数。
3.调用write方法写入数据到指定文件。然后调用newLine()方法另起一行。之后调用flush()方法进行刷新。
4.关闭缓冲区,就是在关闭缓冲区中的流对象。
(4)读取字符流缓冲区步骤:
1.创建一个读取流对象和文件相关联。
2.将字符读取流对象作为参数传递给缓冲区对象的构造函数。
3.调用该缓冲区提供的readLine方法一行一行读取,如果到达文件末尾,则返回null。
4.关闭流资源。
(5)通过缓冲区复制一个文本文件:
字节流
一.字节流的描述
(1)字节流和字符流的基本操作是相同的,但字节流还可以操作其他媒体文件。
(2)由于媒体文件数据中都是以字节存储的,字节流对象可直接对媒体文件的数据写入到文件中,而不用再进行刷流动作。
(3)InputStream特有方法:int available();//返回文件中的字节个数
(4)复制一图片:
(1)提高了字节流的读写效率。
(2)读写特点: read()会将字节byte型值提升为int型值;write()会将int型强转为byte型,即保留二进制数的最后八位。
(3)用字节流缓冲流复制一段声音:
流操作规则
一.键盘录入
(1)标准输入输出流:
1.System.in:对应的标准输入设备,键盘。System.in的类型是InputStream.
2. System.out:对应的是标准的输出设备,控制台 System.out的类型是PrintStream是OutputStream的子类。
(2)转换流:
1.字符流与字节流之间的桥梁,方便了字符流与字节流之间的操作。
2.字节流中的数据都是字符时,转成字符流操作更高效。
3.InputStreamReader:字节到字符的桥梁,解码。 OutputStreamWriter:字符到字节的桥梁,编码。
(3)键盘录入的数据,控制台输出数据:
(1)明确源和目的: 源:InputStream
和 Reader。目的:OutputStream和Writer。
(2)明确数据是否是纯文本数据:源:是纯文本Reader
,否InputStream。目的:是纯文本Writer,否OutputStream 。
(3)明确具体的设备:
1.源设备:硬盘:File;键盘:System.in;内存:数组;网络:Socket流。
2.目的设备:硬盘:File;控制台:System.out;内存:数组; 网络:Socket流
(4)是否需要其他额外功能 :是否需要高效(缓冲区):是,就加上buffer
。
IO流
一.概述
(1)IO流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式。Java用于操作流的对象都在IO包中。
(2)流按操作数据分为两种:字节流和字符流。
1.字节流:InputStream和OutputStream
2.字符流:Reader和Writer
(3)流按流向分为:输入流和输出流。
1.输入流:InputStream和Reader
2.输出流:OutputStream和Writer
字符流
一.字符流的描述
(1)字符流中的对象融合了编码表。使用的是默认的编码,即当前系统的编码。
(2)字符流只用于处理文字数据,而字节流可以处理媒体数据。
二.字符流的读写
(1)写入字符流步骤:
1.创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将 被覆盖。其实该步就是在明确数据要存放的目的地。
2.调用write(String s)方法,将字符串写入到流中。
3.调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。
4.调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据,并将数据刷新到目的地中。
例子:
public class FileWriter1 { public static void main(String[] args) throws IOException { FileWriter fw=new FileWriter("d:/demo.txt");//括号内必须有数据存储的目的地 fw.write("dh");//写入数据 fw.flush();//进行刷新,将数据直接写入到目的地中 fw.close();//关闭流,关闭资源 } }如果想续写,在构造函数中加入true即可。如:
import java.io.*; public class FileWriter1 { public static void main(String[] args) throws IOException { FileWriter fw=new FileWriter("d:/demo.txt",true); fw.write("fyf"); fw.flush(); fw.close(); } }(2)读取字符流步骤
1.创建一个文件读取流对象,和指定名称的文件相关联。要保证该文件已经存在,若不存在,将会发生异常。
2.调用读取流对象的read()方法。read():一次读一个字符,且会继续往下读。
第一种读取方式:使用read()方法读取文本文件数据。
第二种读取方式:使用read(char[])方法读取文本文件数据。
3.读取后要调用close方法将流资源关闭。
read()方法:
import java.io.*; public class FileReadre1 { public static void main(String[] args) throws IOException { FileReader fw=new FileReader("d:/demo.txt");//括号内为读取的源文件 int num=0;//read方法的返回值是Int类型 while((num=fw.read())!=-1)//read方法一次读一个字符,且会继续往下读 { System.out.println((char)num);//强转为字符型 } fw.close(); } }read(char[])方法:
import java.io.*; public class FileReadre1 { public static void main(String[] args) throws IOException { FileReader fw=new FileReader("d:/demo.txt");//括号内为读取的源文件 char[] arr=new char[1024];//定义一个字符型数组,用来接收read方法读出的字符 int num=0; while((num=fw.read(arr))!=-1)//read方法读到的字符装到arr数组中 { System.out.println(arr); } fw.close(); } }拷贝文件:
import java.io.*; public class FileReadre1 { public static void main(String[] args) { FileReader fr=null; FileWriter fw=null; try { fr=new FileReader("d:/demo.txt"); fw=new FileWriter("d:/demo2.txt"); char[] arr=new char[1024]; int num=0; while((num=fr.read(arr))!=-1) { fw.write(arr, 0, num); } } catch(IOException e) { throw new RuntimeException("读写失败"); } finally { try { fw.close(); } catch(IOException e) { System.out.println(e.toString()); } try { fr.close(); } catch(IOException e) { System.out.println(e.toString()); } } } }三.字符流的缓冲区——BufferedReader和BufferedWriter
(1)缓冲区的出现提高了对数据的读写效率。所以在缓冲区创建前,要先创建流对象。即先将流对象初始化到构造函数中。
(2)缓冲技术原理:此对象中封装了数组,将数据存入,再一次性取出。
(3)写入字符流缓冲区步骤:
1.创建一个字符写入流对象。
2.将字符写入流对象作为参数传递给缓冲区的构造函数。
3.调用write方法写入数据到指定文件。然后调用newLine()方法另起一行。之后调用flush()方法进行刷新。
4.关闭缓冲区,就是在关闭缓冲区中的流对象。
(4)读取字符流缓冲区步骤:
1.创建一个读取流对象和文件相关联。
2.将字符读取流对象作为参数传递给缓冲区对象的构造函数。
3.调用该缓冲区提供的readLine方法一行一行读取,如果到达文件末尾,则返回null。
4.关闭流资源。
(5)通过缓冲区复制一个文本文件:
import java.io.*; public class BufferedDemo { public static void main(String[] args)throws IOException { FileReader fr=new FileReader("d:/demo.txt");//创建读取流对象 FileWriter fw=new FileWriter("d:/demo1.txt"); BufferedReader br=new BufferedReader(fr);//把读取流对象作为参数传给读取流缓冲区 BufferedWriter bw=new BufferedWriter(fw); String s=null; while((s=br.readLine())!=null)//readLine()返回值是字符串,且会自动往下读 { bw.write(s); bw.newLine();//换行 bw.flush();//刷新 } bw.close();//关闭流资源 br.close(); } }
字节流
一.字节流的描述
(1)字节流和字符流的基本操作是相同的,但字节流还可以操作其他媒体文件。
(2)由于媒体文件数据中都是以字节存储的,字节流对象可直接对媒体文件的数据写入到文件中,而不用再进行刷流动作。
(3)InputStream特有方法:int available();//返回文件中的字节个数
(4)复制一图片:
import java.io.*; public class InputStream1 { public static void main(String[] args)throws IOException { FileInputStream in=new FileInputStream("d:/aa.jpg"); FileOutputStream out=new FileOutputStream("d:/d.jpg"); //第一种用数组的方式 byte[] arr1=new byte[1024]; int num1=0; while((num1=in.read(arr1))!=-1) { out.write(arr1, 0, num1); } //第二种利用available方法指定数组长度 byte[] arr2=new byte[in.available()]; int num2=0; while((num2=in.read(arr2))!=-1) { out.write(arr2, 0, num2); } out.close();//关闭流资源 in.close(); } }二.字节流缓冲区
(1)提高了字节流的读写效率。
(2)读写特点: read()会将字节byte型值提升为int型值;write()会将int型强转为byte型,即保留二进制数的最后八位。
(3)用字节流缓冲流复制一段声音:
import java.io.*; public class BufferedStream1 { public static void main(String[] args)throws IOException { FileInputStream in=new FileInputStream("d:/a.mp3"); FileOutputStream out=new FileOutputStream("d:/d.mp3"); BufferedInputStream bin=new BufferedInputStream(in); BufferedOutputStream bout=new BufferedOutputStream(out); byte[] arr=new byte[1024]; int num=0; while((num=bin.read(arr))!=-1) { bout.write(arr, 0, num); } bout.close(); bin.close(); } }
流操作规则
一.键盘录入
(1)标准输入输出流:
1.System.in:对应的标准输入设备,键盘。System.in的类型是InputStream.
2. System.out:对应的是标准的输出设备,控制台 System.out的类型是PrintStream是OutputStream的子类。
(2)转换流:
1.字符流与字节流之间的桥梁,方便了字符流与字节流之间的操作。
2.字节流中的数据都是字符时,转成字符流操作更高效。
3.InputStreamReader:字节到字符的桥梁,解码。 OutputStreamWriter:字符到字节的桥梁,编码。
(3)键盘录入的数据,控制台输出数据:
import java.io.*; public class BufferedStream1 { public static void main(String[] args)throws IOException { //字节流转向字符流 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //字符流转向字节流 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out)); String line=null; while((line=br.readLine())!=null) { if("over".equals(line))//输入的数据中包含over,则终止循环 break; bw.write(line.toUpperCase());//写入转化成大写的数据 bw.newLine(); bw.flush(); } br.close(); bw.close(); }二.流操作规则
(1)明确源和目的: 源:InputStream
和 Reader。目的:OutputStream和Writer。
(2)明确数据是否是纯文本数据:源:是纯文本Reader
,否InputStream。目的:是纯文本Writer,否OutputStream 。
(3)明确具体的设备:
1.源设备:硬盘:File;键盘:System.in;内存:数组;网络:Socket流。
2.目的设备:硬盘:File;控制台:System.out;内存:数组; 网络:Socket流
(4)是否需要其他额外功能 :是否需要高效(缓冲区):是,就加上buffer
。
相关文章推荐
- 黑马程序员——java基础之语法(二)
- 面试题 IQ
- Java面试题
- 阿里负责人揭秘面试潜规则
- 黑马程序员-------小数运算之BigDecimal
- 黑马程序员——Java基本语法(一):关键字、标识符、常量与变量、运算符
- 黑马程序员----面象对象及封装
- 微软100题(84)百度面试题_随机发生器
- 微软100题(83)百度面试题_memmove实现
- 黑马程序员_单例设计模式
- 如果像招聘程序员那样招聘木匠
- 黑马程序员_反射
- 黑马程序员_异常
- 微软100题(82)百度面试题_url访问频度排序
- 职场第一天
- 黑马程序员————Java基础日常笔记---对异常的理解
- 黑马程序员-博客导论
- 百度前端面试题—基础
- 黑马程序员- IO(Input- Output)(一)
- 黑马程序员-集合(一)