黑马程序员——java-IO流
来源:互联网 发布:用微信怎么传软件 编辑:程序博客网 时间:2024/05/01 11:36
———–android培训、java培训、java学习型技术博客、期待与您交流!————
1
IO流(掌握)
(1)IO流的作用:上传文件和下载文件。
上传文件: 数据源:本地 目的地:服务器 下载文件: 数据源:服务器 目的地:本地
(2)IO流的分类:
A:流向 输入流 读取数据 输出流 写出数据 B:数据类型 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 一般来说,如果没有说明按照哪种类型分,指的是按照数据类型分。
(3)什么时候使用字符流,什么时候使用字节流。
如果一个要操作的文件,通过记事本打开并能够读懂其内容,就可以考虑使用字符流。否则,就使用字节流。什么都不知道,就用字节流。
(4)IO的基类及具体类
IO
|--字节流 字节输入流 InputStream(抽象类) --FileInputStream 字节输出流 OutputStream(抽象类) FileOutputStream |--字符流 字符输入流 Reader(抽象类) FileReader 字符输出流 Writer(抽象类) FileWriter
2
(1)FileWriter写数据的步骤及代码体现:
FileWriter 的构造方法 --FileWriter(String fileName)// 注意,参数可以只是一个文件名,则是在本建文件(也就是在workspace中创建)也可是是一个绝对路径,那就就在这个绝对路径下创建该文件 --public FileWriter(File file)//把路径封装成一个file对象传进来 --public FileWriter(File file,String name)
public class Io2{ /*从程序向文件中写数据,步骤 * A:创建字符输出流对象。 B:调用write方法。 C:释放资源。 */ public static void main(String[] args) throws IOException { //A:创建字符输出流对象。 FileWriter fw=new FileWriter("a.txt"); //B:调用write方法。 fw.write("你好。该吃饭了"); fw.flush();//刷新缓冲区 fw.close();//释放资源 }}
几个要注意的小问题:
A:创建字符输出流对象做了哪些事情? --调用系统功能,创建一个名字为a.txt的文件 --创建一个输出流对象fw --把这个流对象指向此文件 B:为什么要刷新缓冲区? 因为我们使用的是字符流对象,而数据的底层用的字节流实现的(1字符=2字节), 即,底层在读取数据的时候是每次只能读取一个字节,每个字符的输出都要用到缓冲区, 只有把缓冲区刷新,才能把字符拿到 C:为什么要释放流资源? fw.close(); 作用 --关闭流对象,流对象就是垃圾 --通知操作系统去释放和开始创建的那个文件相关的资源 释放资源,首先会自动调用一次fw.flush(),保证数据不丢失 而后,流对象就是垃圾,不能再使用, D:刷新和释放有什么区别? fw.flush();刷新后,还可以继续使用流对象进行相关的操作 fw.close();释放后,流对象就是垃圾,不能再使用了 E:如何实现数据的换行? fw("\n"); F:如何实现数据的追加写入? 使用带参数的构造方法 public FileOutputStream(String name,boolean append) FileWriter fw=new FileWriter("java.txt",true); 这样在用对象调用write()方法的时候,不是覆盖数据,而是从该文件的末尾开始 追加数据
(2)FileReader读数据的步骤及代码体现:
构造方法: ----public FileReader(File file) ----public FileReader(String fileName) 参数是一个已经存在的文件的名字
public class IO3{ /*1 创建输入流对象 *2 调用Read()方法 *3 释放资源 * */ public static void main(String[] args) throws IOException { //1 创建输入流对象 //从该文件读取数据到程序中,所以前提必须是该文件存在 FileReader fr=new FileReader("java.txt"); //2 调用read()方法 //read()此方法返回的是java.txt文件中,对应字符的ASCII值,read()方法的返回值是一个int类型的数,当返回值为-1的时候说明以及读到该文件的结尾,----------//这是第一种读取数据方法:一次只读一个字节 int leng=0; while((leng=fr.read())!=-1) { System.out.println((char)leng); //把int类型强转为字符类型 }----------//这是第二种读取数据的方法:一次读一个字符数组 char[] ch=new char[1024]; int leng=0; while((leng=fr.read(ch))!=-1) { System.out.println(String.valueOf(ch, 0, leng)); } }}
(3)复制文本数据:
public class IO{//复制文件 public static void main(String[] args) throws IOException { //创建输入流对象(字节流) InputStream ip=new FileInputStream("java.txt"); //创建输出流对象 OutputStream op=new FileOutputStream("b.txt");----------方法一:一次读一个字符:// int leng=0;// while((leng=ip.read())!=-1)// {// op.write(leng);// // }----------方法二:一次读一个字符字符数组: byte[] bys=new byte[1024]; int leng=0; while((leng=ip.read(bys))!=-1) { op.write(bys); } ip.close(); op.close(); }}
3
高效流(掌握)//只是提供高效的操作,底层的读写,还是靠基本操作流
(1)字符高效流
BufferedReader–输入流
构造方法--BufferedReader(Reader in)
BufferedWriter—输出流
构造方法-- public BufferedWriter(Writer out)
高效流的读操作,也和上边一样,有两种方法
一次读一个字符和一次读一个字符数
但是,需要注意的是,
BufferedReader有一个特有的方法
String readLine()//一次读一行数据,,注意,该方法不读换行字符
BufferedWriter也有一个特有的方法
void newLine()//系统自自己分配换行
public class IO4{ public static void main(String[] args) throws IOException { //创建高效输入流对象和高效输出流对象(字符流) BufferedReader br=new BufferedReader(new FileReader("java.txt")); BufferedWriter bw=new BufferedWriter(new FileWriter("c.txt")); //先从java.txt中读取文件数据在向c.txt中写入数据 String leng=null; while((leng=br.readLine())!=null) { bw.write(leng); bw.newLine();////因为readLine()方法不能自动读取换行符, bw.flush(); } bw.close(); br.close(); }}
(2)字节高效流
BufferedInputStream—输入流
构造方法----public BufferedInputStream(InputStream in)
BufferedOutputStream—输出流
构造方法----public BufferedOutputStream(OutputStream out)
用法和基础流的用方法一样
4
转换流
InputStreamReader—是字节流通向字符流的桥梁
构造方法---- public InputStreamReader(InputStream in) 注意一个问题: System.in//返回的是一个InputStream的对象 所以 inputStream is=System.is;//这里是多态
//用System.in录入数据,写到文本文件。public static void main(String[] args) throws IOException { //从键盘录入数据// InputStream in=System .in;// //把字节流转换成字符流// InputStreamReader isr=new InputStreamReader(in);// //把字符流转换成高效字符流// BufferedReader br=new BufferedReader(isr); //上边的三句话,可以缩减为一条语句 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //创建输出流对象, BufferedWriter bw=new BufferedWriter(new FileWriter("e.txt")); String len=null; while((len=br.readLine())!=null) { if(len.equals("over")) { break; } bw.write(len); bw.newLine(); bw.flush(); } }}
OutputStreamWriter 是字符流通向字节流的桥梁
(理解,就是把字符流的文件数据输出到字节流的地方并显示 出来)
构造方法----public OutputStreamWriter(OutputStream out) 小问题: System.out--返回的是PrintStream(类)对象, PrintStream(类)继承 FilterOutputStream(类) FilterOutputStream(类)继承OutputStream(抽象类) 所以,System.out--返回的是OutputStream(抽象类)的子类对象 OutputStream os=System.out;
public class Io6{ public static void main(String[] args) throws IOException, Exception { //封装数据源 BufferedReader ps=new BufferedReader(new FileReader("e.txt")); //封装目的地// OutputStream os=System.out;// OutputStreamWriter osa=new OutputStreamWriter(os);// BufferedWriter bw=new BufferedWriter(osa); //上边三句 可以压缩为下面的一句 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out)); String lenString=null; while((lenString=ps.readLine())!=null) { bw.write(lenString); bw.newLine(); bw.flush(); } bw.close(); ps.close(); }}
5
字符流继承体系简图
字节流继承体系简图
———–android培训、java培训、java学习型技术博客、期待与您交流!————
- 黑马程序员——java IO流
- 黑马程序员—java—IO流
- 黑马程序员——Java IO流
- 黑马程序员——Java IO流
- 黑马程序员——java-IO流
- 黑马程序员java学习—IO流
- 黑马程序员—Java中的IO流
- 黑马程序员—io流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员 — IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员——Java IO概述
- 黑马程序员——Java IO
- oracle Index Unique Range Bitmap
- H264参数结构一:元素的分层结构
- 5种JavaScript和CSS交互的方法
- Qt 学习之路 2(42):QListWidget、QTreeWidget 和 QTableWidget
- java基础入门-对象与构造方法
- 黑马程序员——java-IO流
- 黑马程序员_面向对象补充
- IOS 本地推送和远程推送
- ping通www.google.com但在浏览器中不能连接
- 《剑指Offer》面试题24:二叉搜索树的后序遍历序列
- 第三章第十五题
- 关于Apache的日志
- HDU 取(2堆)石子游戏 2177 威佐夫博弈+尼姆博弈
- Apache Thrift - 可伸缩的跨语言服务开发框架