IO流
IO流基类
(1)概述:
IO流用来处理设备之间的数据传输
(2)分类:
1.按照数据流向,站在内存角度
输入流 读入数据
输出流 写出数据
2.按照数据类型
字节流 可以读写任何类型的文件 比如音频 视频 文本文件
字符流 只能读写文本文件
什么情况下使用哪种流呢?
如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流。其他用字节流。
如果你什么都不知道,就用字节流
(3)基类
a:字节流的抽象基类:
InputStream ,OutputStream。
b:字符流的抽象基类:
Reader , Writer。
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream。
如:Reader的子类FileReader。
(4)创建输入输出流
FileOutputStream(File file)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
//文件输入流
//输入流所关联的文件,如果不存在,就会报错
File file = new File("e.txt");
//FileInputStream(File file)
//通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream in = new FileInputStream(file);
//FileInputStream(String name)
//通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
FileInputStream in2 = new FileInputStream("e.txt");
(5)举例
public class MyTest3 {
public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("e.txt");
//创建一个字节数组,充当缓冲区
byte[] bytes = new byte[1024];
int len = in.read(bytes);//一次读取1024个字节,放到这个缓冲区里面
System.out.println(len); //这个len他实际读取到的长度
String s = new String(bytes,0,len);
System.out.println(s);
in.close();
}
}
(6)使用文件输入输出流进行文件的复制
public class CopyFile {
public static void main(String[] args) throws IOException {
//我们可以使用文件输入输出流,进行文件的复制
//方式:读取一个字节,写入一个字节来复制
FileInputStream in = new FileInputStream("MyTest.java");
FileOutputStream out = new FileOutputStream("E:\\MyTest.java");
//循环的读写
//定义一个变量
int len=0; //表示读取到的字节
while ((len=in.read())!=-1){
out.write(len);
out.flush();//刷新,可以不做,但建议做
}
//释放资源
in.close();
out.close();
}
}
注意:每读取一个字节,指针向后移动一位,所以把in.read赋值给len
public class fuzhi {
public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("C:\\Users\\acer\\Pictures\\1.jpg");
FileOutputStream out = new FileOutputStream("D:\\图片.jpg");
byte[] bytes = new byte[1024 * 1024];
int len=0;
while((len=in.read(bytes))!=-1){
out.write(bytes,0,len);
out.flush();
}
in.close();
out.close();
}
}