黑马程序员-----IO流

来源:互联网 发布:淮南网络宾馆 编辑:程序博客网 时间:2024/06/04 19:22

 ------- android培训、java培训、期待与您交流! ----------

IO流: 用来对本地文件或网络中的资源进行读与写数据的技术
 ·  I: Input 输入(从文件中读取数据)
O: Output 输出(把数据写到文件中)

IO流的分类:
流的方向划分:输入流,输出流
  流中的数据划分:字节流,字符流

IO流的划分
  字节流:
  字节输入流: InputStream, 字节输入流的所有类的超类,  抽象类
|- FileInputStream : 操作文件的字节输入流
|- FilterInputStream
|- BufferedInputStream : 高效的字节输入流

字节输出流: OutputStream, 字节输出流的所有类的超类, 抽象类
|- FileOutputStream: 操作文件的字节输出流
|- FilterOutputStream
|- BufferedOutputStream : 高效的字节输出流

  字符流:
  字符输入流: Reader
  |- 转换流  InputStreamReader
   |- FileReader 操作文件的字符输入流便捷类
   |-BufferedReader   高效流
  字符输出流: Writer
  |- 转换流 OutputStreamWriter
   |- FileWriter 操作文件的字符输出流便捷类

|-BufferedWriter     高效流

IO流中操作文件的步骤:
1,数据源
2,目的地
3,读数据
4,写数据
5,关闭流

写数据到文件的步骤:
1,打开文件
2,写数据
3,关闭文件
从文件中读数据的步骤:
1,打开文件
2,读数据
3,关闭文件

 从文件中读取数据的两种方式


方式1: 一次读取一个字节

关键代码:
InputStream is = new FileInputStream("fos.txt");
int ch = -1;
while ( (ch = is.read()) != -1 ){
//写数据
}

方式2: 一个读取一个字节数组
关键代码:
InputStream is = new FileInputStream("fos.txt");
byte[] buffer = new byte[1024];//存储每次从文件中的读取到的新字节
int len = -1;// 记录每次从文件中读取新字节的个数
while ( (len = is.read(buffer)) != -1) {
//写数据
}

转换流

OutputStreamWriter 字符输出流--写数据

InputStreamReader 字符输入流-- 读数据

文件: File
方法:
public boolean mkdir() 创建文件夹
public boolean mkdirs() 创建多层文件夹
public boolean createNewFile() 创建文件
public boolean isFile() 判断是否是文件
public boolean isDirectory() 判断是否为文件夹
public long length() 返回文件的长度
public String getAbsolutePath() 返回文件的绝对路径
public String getName() 返回文件的名称(包含后缀名)
public File[] listFiles() 返回当前目录下所有的File对象
public File[] listFiles( FilenameFilter filter) 返回当前目录下满足条件的File对象

开启流的自动刷新
PrintWriter( OutputStream os, boolean autoFlush)
PrintWriter( Writer w, boolean autoFlush)

开启流的数据自动追加
FileOutputStream( String namePath, boolean append )
FileOutputStream( File file, boolean append )
FileWriter( String namePath, boolean append )
FileWriter( File file, boolean append )

代码

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/* * 案例: 复制文件夹(包含子文件夹) *  * 需求: 将 E:\resource文件夹 复制到 项目根目录的YesDir文件夹中 *  * 分析: * 1,指定数据源   E:\resource * 2,指定目的地    YesDir * 3,复制文件夹 * a, 创建目的地文件夹 * b, 获取到数据源中每一个File对象 * c, 判断当前File是否为 文件夹 * 是: 文件夹 * 递归,完成子文件夹的复制 * 否: 文件 * 完成文件复制 *  */public class CopyDirectorys {public static void main(String[] args) throws IOException {//1,指定数据源   E:\resourceFile srcPath = new File("E:\\resource");//2,指定目的地    YesDirFile destPath = new File("YesDir");//3,复制文件夹copyDirectorys(srcPath, destPath);}//复制文件夹private static void copyDirectorys(File srcPath, File destPath) throws IOException {//a, 创建目的地文件夹destPath.mkdir();//b, 获取到数据源中每一个File对象File[] files = srcPath.listFiles();for (File file : files) {//c, 判断当前File是否为 文件夹if (file.isDirectory()) {//file = E:\resource\各种专治   ---  数据源//dest = YesDir\各种专治  --- 目的地//是: 文件夹,  递归,完成子文件夹的复制File dest = new File(destPath, file.getName());copyDirectorys(file, dest);} else {//file = E:\resource\Demo.java//dest = YesDir\Demo.java//否: 文件,   完成文件复制File dest = new File(destPath, file.getName());copyFile(file, dest);}}}//复制文件private static void copyFile(File file, File dest) throws IOException {//数据源BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));//目的地BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));//读数据byte[] buffer= new byte[1024];int len = -1;while ((len = bis.read(buffer)) != -1) {//写数据bos.write(buffer, 0, len);}//关闭流bos.close();bis.close();}}

总结

IO流操作的时候要注意字符编码相同,否则会出现乱码现象

      java中只支持字节流与字符流数据的传输,而我们想 传输 java基本数据类型的数据

      使用数据输入输出流,将基本的字节流进行包装,然后就可以实现传输java基本数据类型的数据了

字符流使用了字节流读到一个或多个字节(一个

中文对应的字节数是两个,在

UTF-8

码表中是

3

个字节)时,先去查指定的编码表

0 0
原创粉丝点击