java-IO流(File)

流的基本概念
   数据源 data source. 提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。
   数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。 流是一个抽象、动态的概念,是一连串连续动态的数据集合。


 

 Java流的分类

按流区分为输出流和输入流

输出流:OutputStream和Writer作为基类

输入流:InputStream和Reader作为基类

输入输出流是相对于计算机内存来说的,而不是相对于源和目标

按照处理数据单元划分为字节流和字符流

字节流:字节输入流InputStream基类 字节输出流OutputStream基类

字符流:字符输入流Reader基类 字符输出流Writer基类

字节流是8位通用字节流,字符流是16位Unicode字符流

功能不同


        节点流:可以直接从数据源或目的地读写数据。 
        处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目 的主要是简化操作和提高性能.
        节点流和处理流的关系
        节点流处于io操作的第一线,所有操作必须通过他们进行
        处理流可以对其他流进行处理(提高效率或操作灵活性)
使用FileInputStream 读文本文件
//File类在Java中表示抽象类路径名,可以表示一个具体的文件也可以表示一个目录。
 
 

public class FileDemo {
 
    public static void main(String[] args) {
//        File file = new File("a.txt");
        //创建文件
//        try {
//            file.createNewFile();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
        //执行,读取,修改
//        System.out.println(file.canExecute());
//        System.out.println(file.canRead());
//        System.out.println(file.canWrite());
        //删除文件或目录
//        System.out.println(file.exists());
//        System.out.println(file.delete());
        //返回此抽象路径名的绝对形式
//        System.out.println(file.getAbsoluteFile());
        //返回此抽象路径名的绝对路径字符串
//        System.out.println(file.getAbsolutePath());
 
        //返回文件的父目录,如果文件路径名是一个具体的文件,此时返回null
//        System.out.println(file.getParent());
//        System.out.println(file.getPath());
//        System.out.println(file.isDirectory());
//        System.out.println(file.isFile());
//        System.out.println(file.length());
 
        File file2 = new File("123.txt");
        //即使没有这个文件,也可以获取文件的绝对路径名
        System.out.println(file2.getAbsolutePath());
        System.out.println(file2.lastModified());
 
//        System.out.println("****************");
//        File file3 = new File("E:\\mate");
//        String[] strings = file3.list();
//        for(String path : strings){
//            System.out.println(path);
//        }
 
//        File[] files = file3.listFiles();
//        for(File file1 :files){
//            System.out.println(file1);
//        }
 
        //遍历E盘下所有的文件和目录?
//        System.out.println("**********************");
        File[] roots = File.listRoots();
//        for(File root :roots){
//            System.out.println(root);
//        }
 
//        printFiles(new File("E:\\mate"));
//        File file4 = new File("E:\\a.txt");
//        file4.mkdir();
//        file4.mkdirs();
//        file4.renameTo(new File("a123.txt"));
//        System.out.println(File.separator);
 
        //删除目录?
        File file5 = new File("E:\\mate\\abc");
        file5.delete();
 
    }
 
    //在遍历文件的时候,文件系统中可能存在一些受保护的文件,访问是需要访问权限的,此时会抛出空指针异常。
    public static void is(File file){
        //获取指定路径名下所有的文件和目录
        File[] files = file.listFiles();
        //遍历文件
        for(File file1 : files){
            //判断是否是目录
            if(file1.isDirectory()){
                is(file1);
            }else{
                System.out.println(file1.getAbsolutePath());
            }
        }
    }
}

什么时候需要加flush,什么时候不加flush
    最保险的方式,在输出流关闭之前每次都flush一下,然后再关闭
    当某一个输出流对象中带有缓冲区的时候,就需要进行flush,不建议大家去记住每一个输出流的分类

public class WriterDemo {
    public static void main(String[] args) {
        File file = new File("a1.txt");
        Writer writer = null;
        try {
            //创建字符流对象
            writer = new FileWriter(file,true);
            //传输数据
            writer.write(99);
            writer.write("abc 你好,中国!");
            writer.write(new char[]{'5','t','p'});
            writer.append('z').append('y').append('y').append('L');
            //强制将缓冲区的数据写入到目的地
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


File 类用于访问文件或目录的属性
 程序和数据源之间通过流联系
        输入流和输出流
        字节流和字符流
        节点流和包装流
        FileInputStream和FileOutputStream以字节流的方式读写文本文件。 
        BufferedReader和BufferedWriter以字符流的方式读写文本文件,而且效率更高。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值