【知了堂学习笔记】_Java中IO流的学习

请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php
IO流
一、概念
流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。
二、用途
1.创建文件,创建目录
2.拷贝视频,拷贝文件
3.读取文件中内容信息
4.读取键盘输入信息
5.网络文件传输
三、分类
字节流:拷贝视频,拷贝文件,因为操作必须精确到字节
字符流:读取文件中内容,把内容进行输出
字节流和字符流的实现方式:输入流和输出流
输入流和输出流:
文件的拷贝,它完成一个动作的实现
第 1 步:选中 源文件(对应程序中 输入流)
第 2 步:拷贝操作(IO 流中 read 和 write 的操作)
第 3 步:选择拷贝的地方, 目标文件(对应程序中 输出流)
难点:不知道输入流什么用,也不知道输出流什么时候用
下图是一个描述输入流和输出流的类层次图
这里写图片描述
四、学习内容
IO 流的所有应用在 Java API 文档中 java.io 包里面
文件操作, java.io.File 类
字节流,InputStream, OutputStream
字符流,Reader,Writer
五、File类
1、File类的结构
 构造方法:只提供带参数的构造方法
 File(File parent, String child):在已有的路径下面去创建一个文件或者一个目录
 File(String pathname):在给定路径中创建一个文件或一个目录
 File(String parent, String child):在已有的路径下面去创建一个文件或者一个目录
 普遍方法
 boolean createNewFile():创建一个文件
 boolean delete():删除文件或者目录
 boolean exists():文件或目录是否存在
 String getAbsolutePath():返回文件或目录的绝对路径
 File getAbsoluteFile():返回文件和目录的绝对路径,但是这个绝对路径是有 File 对象来表示
 String getName():返回文件或目录的名称
 File getParentFile():返回父级目录对象
 String path():返回文件或目录路径
 boolean isDirectory():判断是否是目录
 boolean isFile():判断是否是文件
 long length():返回文件大小
 File[] listFiles():返回当前目录下的文件或目录
 boolean mkdirs():创建多级目录
2、File类的应用
1.案例:创建目录
 先要创建 File 类对象
 调用 mkdirs

package io;

import java.io.File;
/**
 * 创建目录
 * @author Lenovo
 *
 */
public class Mkdirs {
    public static void main(String args[]) {
        File file = new File("F:\\file\\music");
        file.mkdirs();
    }
}

2.案例:创建文件
 先创建 File 类对象
 调用 createNewFile

package io;

import java.io.File;
import java.io.IOException;
/**
 * 创建文件
 * @author Lenovo
 *
 */
public class CreateNewFile {
    /**
     * 1.应该判断目录是否存在
     * 2.然后再去创建文件
     * @param args
     * @throws IOException
     */
    public static void main(String args[]) throws IOException {
        File directory = new File("F:\\file\\music");
        File file = new File(directory, "知了堂.docx");
        if(!directory.exists()) {
            directory.mkdirs();
        }
        file.createNewFile();
    }

}

3.案例:删除目录
 先创建 File 类对象
 调用 delete,注意如果有文件的存在,则目录删除不掉

package io;

import java.io.File;
/**
 * 删除目录
 * @author Lenovo
 *
 */
public class DeleteDirectory {
    /**
     * 1.如果是多级目录怎么删除
     * 2.如果是目录里有文件怎么删除
     * @param args
     */
    public static void main(String args[]) {
        File directory = new File("F:\\file\\music");
        if(!directory.exists()) {
            return;//终止方法
        }
        File[] files = directory.listFiles();//返回music目录下的文件
        if(files.length > 0) {//判断music目录下还有其他文件
            for(File file : files) {
                if(file.isFile()) {
                    file.delete();
                }
            }
        }
        directory.delete();//最后删除misic的目录,整个main方法不完整,因为music中还有子目录
    }
}

4.案例:获取目录下文件(一级目录)
 先创建 File 对象
 调用 listFiles

package io;

import java.io.File;
/**
 * 获取目录下的所有文件或者一级目录
 * @author Lenovo
 *
 */
public class GetOneClassDirectory {
    public static void main(String args[]) {
        File directory = new File("F:\\level_3\\01_学习内容");
        File[] files = directory.listFiles();
        for(File file : files) {
            System.out.println(file.getName());
        }
    }
}

5.案例:获取文件大小
 创建 File 对象
 判断是否是文件
 计算文件的大小

package io;

import java.io.File;
/**
 * 获得文件的大小
 * @author Lenovo
 *
 */
public class GetFileSize {
    public static void main(String args[]) {
        File file = new File("F:\\jdk-7u80-windows-x64.zip");
        if(file.isFile()) {
            System.out.println(file.length());//字节大小
        }
    }
}

6.案例:获取文件的路径
 getPath
 getAbsolutePath
 getAbsoluteFile

package io;

import java.io.File;
/**
 * 获取文件的路径
 * @author Lenovo
 *
 */
public class GetFilePath {
    public static void main(String args[]) {
        File file = new File("F:\\level_3\\01_学习内容\\01_教学内容\\day03_线程_基础\\Thread.zip");
        String path = file.getPath();
        String pathAbsolutePath = file.getAbsolutePath();
        File dd = file.getAbsoluteFile();//得到绝对路径下的File对象,则我们去测试一下getPath方法
        System.out.println("path = " + path);
        System.out.println("pathAbsolutePath = " + pathAbsolutePath);
        System.out.println("dd = " + dd.getPath());
    }
}

六、字节流
1、 字节流的结构
 字节的输入流:InputStream
 字节的输出流:OutputStream
 重点如下:
 InputStream,OutputStream 都是抽象类
 输入流的方法:read,close, available,这些方法主要是为了读取数据,关闭 IO 流,计算文
件的大小
 输出流的方法:write, close, flush,这些主要是为了写数据,关闭 IO 流,刷新缓存
2、 IO 的用法
这里写图片描述
3、文件拷贝
 实现文件拷贝的思路
 选择使用什么类型的流(字节流,字符流)
 因为文件拷贝是一种二进制流,拷贝的过程通过读取字节完成拷贝工作
 所以我们选择字节流

package io;

import java.io.*;
/**
 * 文件拷贝
 * 1.选择使用什么类型的流(字节流,字符流)
 * 2.因为文件拷贝是一种二进制流,拷贝的过程通过读取字节完成拷贝工作
 * 3.所以我们选择字节流
 * @author Lenovo
 *
 */
public class FileCopy {
    public static void main(String args[]) throws IOException {
        File srcFile = new File("F:\\level_3\\01_学习内容\\知了堂_软工_技术笔记_lv3_水印.pdf");
        File dirFile = new File("E:\\知了堂_软工_技术笔记_lv3_水印.pdf");

        InputStream is = new FileInputStream(srcFile);
        OutputStream os = new FileOutputStream(dirFile);

        //读与写的操作
        byte[] b = new byte[1024];//读取过程中能够存储的字节数量
        int i = -1;//判断是否读取源文件结束
        while((i = is.read(b)) != -1) {
            os.write(b, 0, i);//从缓存中0开始输出,到i结束
        }

        is.close();
        os.flush();
        os.close();
    }
}

七、字符流
1、字符流的结构
 输入流 Reader,抽象类
 输出流 Writer,抽象类
 读取数据时候通过 read
 写入数据时候通过 write
2、字符流的用法
这里写图片描述
3、 读取文件中内容
 案例:读取 txt 文件中内容并输出到控制台
 读取 txt 文件中内容使用 Reader
 读出来的内容写入到 Console,我们采用 System.out.println(…..)

package io;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
 * 读文件的内容
 * @author Lenovo
 *
 */
public class ReadFile {
    public static void main(String args[]) throws IOException {
        File srcFile = new File("F:\\752.txt");

        Reader reader = new FileReader(srcFile);

        //读操作
        char[] c = new char[1024];//存储读取到字符
        int i = -1;//标明读取文件结束
        while((i = reader.read(c)) != -1) {
            System.out.println(c);
        }

        reader.close();
    }
}
package io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
 * 读文件的内容 采用缓冲流来完成文件读取
 * @author Lenovo
 *
 */
public class ReadFile2 {
    public static void main(String args[]) throws IOException {
        File srcFile = new File("F:\\752.txt");
        Reader reader = new FileReader(srcFile);

        BufferedReader br = new BufferedReader(reader);//构建缓冲流就OK了

        //读操作
        String content = null;//获取读取到的内容,页标明是否文件读取结束
        while((content = br.readLine()) != null) {
            System.out.println(content);
        }

        br.close();
    }
}

4、写内容到文件里面
 案例:先读取到 txt 文件的内容,然后将此内容写入到 word 文档
 输入流 BufferedReader
 输出流 BufferedWriter

package io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

public class ReadAndWrite {
    /**
     * 读取文件的内容并写入到word文档里面
     * @param args
     * @throws IOException
     */
    public static void main(String args[]) throws IOException {
        File srcFile = new File("F:\\752.txt");
        File dirFile = new File("F:\\752.doc");

        Reader reader = new FileReader(srcFile);
        Writer writer = new FileWriter(dirFile);

        BufferedReader br = new BufferedReader(reader);
        BufferedWriter bw = new BufferedWriter(writer);

        //读与写的操作
        String content = null;//获取读取到的内容,页标明是否文件读取结束
        while((content = br.readLine()) != null) {
            bw.write(content);//将缓冲中读取到的内容写入到word文档里面
            bw.newLine();//写一个行分割符
        }

        br.close();
        bw.flush();
        bw.close();
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值