第8章 IO输入输出
来源:互联网 发布:1970年nba总决赛数据 编辑:程序博客网 时间:2024/06/14 21:26
在java中,将通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象表述为"流"
java中的流都位于java.io包中,成为IO(输入,输出)流
按照 操作数据的不同 分为字节流 和字符流
按照 数据传输的方向 分为输入流 和输出流
程序从输入流中读取数据 想输出流总写入数据.
在IO 包中
字节流的输入输出 分别用 java.io.InputStream 和java.io.OutputStream表示
字符流的输入和输出 分别用java.io.Reader 和java.io.Writer表示
8.1.1字节流的概念
在计算机中, 所有的文件都是以二进制(字节)形式 存在
针对字节的输入和输出提供的流 称为字节流.
在JDK中, 提供了两个抽象类InputStream和OutputStream, 它们是字节流的顶级父类.
InputStream的常用方法
int read() : 从输入流中读取一个8位的字节,把它转化成0~255之间的整数,并返回这个整数
int read(byte[] b) :从输入流读取若干个字节,把它们保存到参数b指定的字节数组中,返回整数表示读取的字节数
int read (byte[] b,int off,int len) :从输入流读取若干个字节,把它们保存到b字节数组,off表示指定字节数组的下标,len表示读取的字节数目
void close()
前三个方法是用来 读取 数据用的 , 最后一个用来关闭输入流. 节约资源
OutputStream的常用方法
void write(int b)
void write(byte[] b)
void write(byte[] b, int off, int len)
void flush()
void close()
8.1.2字节流读写文件
在操作文件时 ,最常见的就是从文件中读取数据并将数据写入文件,即文件的读写.
针对文件的读写,JDK专门提供了两个类,分别是FileInputStream和FileOutputStream
public class Demo01 {public static void main(String[] args) throws IOException {// 创建一个文件字节输入流FileInputStream in = new FileInputStream("E:\\a.txt");// 读取输入流中的数据int b = 0; // 返回为读取到的第一个byte的int表示形式,read中内置一个计数器,跳到下一个 while(true){ b = in.read(); if(b==-1){ break; }System.out.println(b);}in.close();}}
最后显示结果是,a.txt文件中 所有字节对应的十进制数
注意:在读取文件数据时,必须保证文件是存在并且可以读的,否则会抛出,FileNotFoundException
public class Demo02 {public static void main(String[] args) throws Exception {//创建一个字节输出流FileOutputStream out = new FileOutputStream("E://a.txt");//定义一个要写入的字符串String str ="coming Baby";//把字符串转化成 字节数组byte[] byt = str.getBytes();out.write(byt); //将一个字节数组写入//也可以将数组循环一个一个写入out.close();}}
注意, 在已经存在的文件中写入数据, 会覆盖原来的内容
若希望在原来的内容上追加内容, 在创建输出流对象时候,
选择 new FileOutputStream(file, append) 这个构造函数
8.1.3文件的拷贝
在应用程序中文件通常是成对出现的,即输入流和输出流一起用.
案例:
//IO 字节流 的拷贝public class Demo03 {public static void main(String[] args) throws Exception {// 拷贝 E:\\a.txt 文件 去 D:\\copy.txt// 创建一个输入流 读取 内容FileInputStream in = new FileInputStream("E:\\a.txt");// 创建一个输出流 写入数据FileOutputStream out = new FileOutputStream("D:\\copy.txt");int b = 0; // 这种方法是一个字节一个字节的 读和写,效率低下while(true){b = in.read();if(b==-1){break;}out.write(b);}out.close(); //先关写出去的流 in.close(); //后关读进来的流}}
8.1.4字节流的缓冲区
当通过流的方式拷贝文件时,为了提高效率也可以定义一个字节数组作为缓冲区.在拷贝文件时,可以一次性读取多个字节的数据.
并保存在字节数组中,然后将字节数组中的数据一次性写入文件.
public class Demo04 {public static void main(String[] args) throws IOException {// 拷贝 E:\\a.txt 文件 去 D:\\copy.txt// 创建一个输入流 读取 内容FileInputStream in = new FileInputStream("E:\\a.txt");// 创建一个输出流 写入数据FileOutputStream out = new FileOutputStream("D:\\copy.txt");//定义一个字节数组作为缓冲区byte[] buff = new byte[1024];//定义一个int类型的变量len记住读取读入缓冲区的字节数int len;while((len=in.read(buff))!=-1){out.write(buff, 0, len);}out.close();in.close();}}8.1.5 装饰设计模式
------
8.1.6字节缓冲流
-----
8.2.字符流
8.2.1字符流定义基本用法
与字节流一样,字符流也有两个顶级父类 分别是 Reader 和 Writer.
其中Reader是字符输入流 Writer是字符输出流
它们的常用子类中FileReader和FileWriter用于读写文件
8.2.2 字符流操作文件
从输入流中读数据
public class Demo05 {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubFileReader fr = new FileReader("E:\\a.txt"); int ch;while((ch=fr.read())!=-1){System.out.println((char)ch);}//为什么这种方法不行?//while(fr.read()!=-1){//System.out.println((char)fr.read());//}fr.close();}}
在输出流中写数据
------
- 第8章 IO输入输出
- 第8章 IO
- 第6章 输入输出
- JAVA进阶 面向对象程序设计——第8周 异常处理与输入输出(IO)
- IO输入输出
- IO输入输出
- IO/输入输出
- IO/输入输出
- IO输入输出
- IO输入输出
- IO:输入输出
- IO/输入输出
- IO输入输出流学习笔记(第一篇)(JAVA)
- C语言基本教程 第12课:文件输入输出(IO)
- 第17节--python的输入输出(IO)
- 第8章 IO库
- 第5章 输入输出系统
- 第五章:输入输出(IO)管理
- PHP超时处理全面总结
- Java中的length字段和length()方法
- java常用基本类库String、包装类、异常总结
- OC的内存管理
- linux 服务器/客户端 tcp通信的简单例子
- 第8章 IO输入输出
- 通知(notification)
- unity初写游戏(三)人物的瞬移
- 串口通信中数据的奇偶校验位算法
- 9.9递归和动态规划(八)——给定数量不限的硬币,币值为25分,10分,5分,1分,计算n分有几种表示法
- stringstream的用法
- Node.js 常见面试题
- windows下安装sass/scss
- UNIX网络编程卷一:第十五章 Unix域套接字