黑马程序员_IO流的概述和字符流
来源:互联网 发布:收购淘宝店铺可信吗 编辑:程序博客网 时间:2024/06/05 06:42
———– android培训、 java培训
、java学习型技术博客、期待与您交流! ——-
IO流(输入流&输出流)
IO(Input Output)流 1:IO流用来处理设备之间的数据传输 2:Java对数据的操作是通过流的方式 3:Java用于操作流的对象都在IO包中 4: 流按操作数据分为两种:字节流和字符流。 5:流按流向分为:输入流,输出流。 输入流和输出流相对于内存中:输入 将内存的数据写入到外设中:输出。 把数据写入到内存当中,输入。
字符流的由来:
其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字。 在对这个文字进行操作。简单说:字节流+编码表。
字符流-FileWriter
IO流常用基类 1:字节流的抽象基类: (1):InputStream, OutputStream。 2:字符流的抽象基类: (1):Reader, Writer。 3:注:由这四个类派生出来的子类名称都是 以其父类名作为子类名的后缀。 (1)如:InputStream的子类FileInputStream。 (2)如:Reader的子类FileReader。
字节流的两个顶层父类:
1:InputStream 2:OutputStream
字符流的两个顶层父类:
1:Reader(读 往内存里面输入) 2:Writer(写 从内存里面写到硬盘里面 <输出>)
这些体系的子类都是以父类名作为后缀。
//需要:将一些文字存储到硬盘一个文件中。
记住:如果要操作文字数据,建议优先考虑字符流。
而且要将数据从内存写到硬盘上,要使用字符流中的输出流。Writer
硬盘的数据基本体现是文件,希望找到一个可以操作文件的Writer。
找到了FileWriter
public class Three1 { private static final String LINE_SEPARATOR = System.getProperty("line.separator"); public static void main(String[] args) throws IOException { //创建一类可以往文件中写入字符数据的字符输出流对象。 /* 既然是往一个文件中写入文字数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地) 如果文件不存在,则会自动创建。 如果文件存在,则会被覆盖。 如果构造函数中加入true,可以实现对文件进行续写! * */ FileWriter fw=new FileWriter("E:\\Io\\io.txt",true); /* 调用Writer对象中的write(String)方法,写入数据。 其实数据写入到临时存储缓冲区中。 * */ fw.write("aaaa"+LINE_SEPARATOR+"hahahaha"); fw.write("zzzz"); /* *进行刷新,将数据直接写入到目的地中。 * */// fw.flush(); //关闭流,关闭资源。在关闭前会先调用flush刷新缓冲区中的数据到目的地 fw.close(); }}
字符流-FileWriter-IO异常处理
public class Five1{ private static final String LINE_SEPARATOR = System.getProperty("LINE.SEPARATOR"); public static void main(String[] args) throws IOException { //IO异常的基本处理 FileWriter fw=null; try { fw=new FileWriter("demo.txt",true); fw.write("aaaa"+LINE_SEPARATOR+"zzzzz"); } catch (Exception e) { if(fw!=null){ try { fw.close(); } catch (Exception e2) { throw new RuntimeException("关闭失败"); } } } }}
字符流-FileReader-读取方式一
//需求:读取一个文本文件,把内容输出到控制台
//找到了FileReader
public class Six1 { public static void main(String[] args) throws IOException { //1,创建读取字符流的对象 /* 在创建读取流文件时,必须要明确被读取的文件,一定要确定该文件是存在的。 */ FileReader fr=new FileReader("E:\\Io\\io.txt"); /* //用Reader中的read方法读取字符。 int ch=fr.read(); System.out.println(ch); int ch1=fr.read(); System.out.println((char)ch1); fr.close();*/ //使用while循环遍历读取数据 int ch=0; while ((ch=fr.read())!=-1){ System.out.println(ch); //System.out.println((char)ch); } }}
(字符流-FileReader-读取方式二)
public class Seven1 { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("E:\\Io\\io.txt"); /* 使用read(char[])读取文本文件数据。 先创建字符数组。 * */ /* char[] buf=new char[3]; int num=fr.read(buf);//将读取到的字符存储到数组中。 System.out.println(num+":"+new String(buf)); //结果1 3:abc int num1=fr.read(buf); System.out.println(num1+":"+new String(buf));//结果2 2:dec int num2=fr.read(buf); System.out.println(num2+":"+new String(buf));//结果3 -1:dec */ /* *注意文本文件里面只有abcde这5个英文数据。 解释为什么 结果2和结果3的结果一样。 首先数组创建出来三个小空间,开始的时候,就给每个小空间 分别赋值上 a b c 然后,第二次读的时候,d e就分别覆盖 a b ,还有c 没有覆盖,所以c 的位置就不变 同理可以知道结果3,因为没有值啦,就覆盖不了,就保留原先的dec啦。 * */ char[] buf=new char[3]; int num=fr.read(buf);//将读取到的字符存储到数组中。 System.out.println(num+":"+new String(buf,0,num)); //结果1 3:abc 指定输出多少个文字 int num1=fr.read(buf); System.out.println(num1+":"+new String(buf,0,num1));//结果2 2:de/* char [] buf=new char[3]; int len=0; while((len=fr.read(buf))!=-1){ System.out.println(new String(buf,0,len)); }*/ }}
作业:将C盘中的一个文本文件复制到D盘。
分析: 复制原理: 读取C盘文件中的数据。 将这些数据写入到D 盘中。 连读带写。 思路: 1.需要读取源。 2.将读到的源数据写入到目的地。 3.既然是操作文本数据,使用字符流。
//方法1 public class IO08_1 { public static void main(String[] args) throws IOException { //1,读取一个已有的文本文件,使用字符流读取流和文件相关联。 FileReader fr =new FileReader("E:\\Io\\io.txt"); //2,创建一个目的,用于存储读到数据。 FileWriter fw=new FileWriter("E:\\Io\\ioCopy.txt"); //3,频繁的读写操作。 int ch=0; while((ch=fr.read())!=-1){ System.out.println((char)ch); fw.write((char)ch); } //4,关闭流资源。 fw.close(); fr.close(); }}
//方法2public class Io09_1 { public static void main(String[] args) throws IOException { FileReader fr=null; FileWriter fw=null; try { fr=new FileReader("E:\\Io\\io.txt"); fw=new FileWriter("E:\\Io\\ioCopy1.txt"); char[] buf=new char[3];//这就是缓冲区 int ch=0; while((ch=fr.read(buf))!=-1){ fw.write(buf, 0, ch); } } catch (Exception e) { e.printStackTrace(); }finally{ try { if(fr!=null){ fr.close(); } } catch (Exception e2) { throw new RuntimeException("关闭流失败"); } try { if(fw!=null){ fw.close(); } } catch (Exception e2) { throw new RuntimeException("关闭流失败"); } } }}
0 0
- 黑马程序员_IO流的概述和字符流
- 黑马程序员_IO流概述
- 黑马程序员_IO流概述
- 黑马程序员_IO流概述
- 黑马程序员_IO(字符流和字节流)
- 黑马程序员_IO流之字符流
- 黑马程序员_IO流字符流
- 黑马程序员_IO流之字符流
- 黑马程序员_IO流字符流-缓冲区
- 黑马程序员_IO流之字符流的学习
- 黑马程序员_IO流-字符流的学习(一)
- 黑马程序员_IO流-字符流的学习(二)
- 黑马程序员_IO流1_(IO流概述,字符流,字节流,FileWriter,FileReader)
- 黑马程序员_IO流一(IO流概述,字符流,FileWriter,FileReader)
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- 黑马程序员_IO流
- windows 下编译libuv
- 自定义封装进度提示框《MrLoadView》
- BZOJ 1113: Poi2008海报PLA(单调栈)
- iOS网络编程:一 、GET方式同步请求
- Spring中 <tx:advice/> 标签
- 黑马程序员_IO流的概述和字符流
- IP 组播
- 安装NumPy和SciPy
- Remove Element
- 如何搭建Python3.4+Selenium
- python爬虫写文件编码
- C++的const类成员函数
- Ubuntu安装g++
- Mysql如何获取数据库文件的存放路径