IO(QQ,交流1073287714)
1 数据流是一串连续不断的数据的集合,就像水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.
2 数据写入程序可以使一段一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流.
1 在程序中所有的数据都是以流的方法进行传输和保存的。
2 Java 的IO是实现输入和输出的基础。
3 Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入输出功能。
4 输入和输出是一个相对的概念,我们一般站在程序的角度来分析和处理问题的。
5 程序需要数据 --> 读进来 -->输入
程序保存数据 --> 写出去 -->输出
6 水流
1 从不同角度分类:
按流动方向的不同可以分为输入流和输出流;
按处理数据的单位不同分为字节流和字符流;
按功能的不同可分为节点流和处理流;
节点流:直接操作目标设备,例如:磁盘或一块内存区域。
处理流:通过操作节点流,从而间接完成输入或输出功能的流。处理流是的存在是建立在一个已经存在的输入流或输出流的基础之上的。
所有流都继承于以下四种抽象流类型的某一种:
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
1 二者仅仅是操作单位不一样。
InputStream和Reader是所有输入流的基类,他们都是抽象类,本身不能创建实例,但是他们是所有输入流的模板。
一般来说处理字符或字符串时使用字符流,处理字节或二进制对象时应使用字节流;
字节流
字节流主要是操作byte(字节)的类型数据:
字节输出流:OutputStream
字节输入流:InputStream
OutputStream
void flush() throws IOException:清空缓冲
abstract void close() throws IOException:关闭输出流
void write(int c) throws IOException:将一个字节写到输出流中。
void write(byte[] b) throws IOException:将一个byte数组写出。
void write(byte[] b,int off,int len) throws IOException:将字节数组从off位置开始,长度为len的字节写入到输出流中。
以其子类FileOutputStream来实例化OutputStream对象
FileOutputStream(File/String file) throws FileNotFoundException创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File/String file, boolean append) throws FileNotFoundException创建一个向指定 File 对象表示的文件中写入数据的文件输出流
例子;
package io;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.io.FileOutputStream;public class OutPutStreamDemo {public static void main(String [] args) throws IOException{//1.找到流的目标String filename ="D:\\BaiduYunDownload\\传智播客java基础班\\day21\\Stream.txt";//2.创建输出管道,并连接目标1,0即输出管道OutputStream o= new FileOutputStream(filename);//3.输出操作o.write(56);//4,关闭操作o.close();}}
InputStream
int available() throws IOException:文件大小
abstract void close() throws IOException:关闭流
int read() throws IOException:从输入流中读取单个字节,返回该字节。
int read(byte[] b) throws IOException:从输入流中读取b.length个字节存储在字节数组b中,返回实际读取的字节数。
直到read(byte[] b)方法返回-1表示输入流的结束。
以其子类FileInputStream来实例化InputStream对象
FileInputStream(File/String file) throws FileNotFoundException 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
package io;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class inputStreamDemo { public static void main(String [] args) throws IOException{ //1,找到数据源 File src = new File ("F:\\学习\\Java\\笔记\\code\\Test\\src\\TestIeteor.java"); //2.创建输入流的管道,并和数据源连接上 InputStream is = new FileInputStream(src); //3.读取操作 byte[] buff =new byte[100];//定义一个100字节的缓存区 int len =0;//表示一次读了多少个字节,当len=-1时表示读取完毕 while((len =is.read(buff))!=-1){ String data=new String(buff,0,len); System.out.println(data); System.out.println("============"); } is.close(); } }
3 文件拷贝
package io;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class Iocopy { public static void main(String[] args) throws IOException{ /** * srcFile 源文件 * tragetFile 目标文件 */ //public static void copy(File srcFile,File tragetFile) /* 1 找到源文件和目标文件 * 2 创建管道,需要两个管道 * 3 IO操作 * 4 关闭操作 */ InputStream in = null;//声明对象 OutputStream out =null; in =new FileInputStream("F:\\学习\\Java\\笔记\\code\\Test.java");//创建管道 out =new FileOutputStream("F:\\学习\\Java\\笔记\\code\\wow.java"); byte [] buff=new byte[100];//创建缓存区 int len =0; while((len=in.read(buff))!=-1){ out.write(buff,0,len); } out.close(); }}
4Java7自动关闭资源
Java 7简化资源清理(try-with-resources)自动关闭资源的try语句
格式
try (
FileOutputStream fos = new FileOutputStream("test.txt");
DataOutputStream dos = new DataOutputStream(fos)
)
{
dos.writeUTF("Java 7 Block Buster");
} catch (IOException e) {
// log the exception
}
例子