输入输出(I/0)流

一、 File: 是所有文件或者文件夹的路径抽象表现形式

file自动重写了toString方法,所以直接打印显示的是file内容

    构造方法:
        public File(String pathname)
        public File(String parent,String child)
        public File(File parent,String child)

参考用法:

public class FileDemo1 {
    public static void main(String[] args) {
        // 将未来要操作的路径封装成File对象
        /*
            路径:
                绝对路径(完整路径):指的是带有盘符的路径【在windows】
                    举例:D:\projects\IDEAProjects\bigdata31-java\src\day16\data\a.txt
                相对路径:相对于该项目而言,将该项目作为开始
                    举例:src/day16/data/a.txt

         */
        //public File(String pathname)
        File file = new File("D:\\projects\\IDEAProjects\\bigdata31-java\\src\\day16\\data\\a.txt");
        System.out.println(file);
        File file2 = new File("src/com/shujia/day16/data/a.txt");
        System.out.println(file2);

        //public File(String parent,String child)
        File file3 = new File("D:\\projects\\IDEAProjects\\bigdata31-java\\src\\day16\\data","a.txt");
        System.out.println(file3);

        //public File(File parent,String child)
        File file4 = new File(new File("D:\\projects\\IDEAProjects\\bigdata31-java\\src\\day16\\data"),"a.txt");
        System.out.println(file4);



    }
}

File类中的成员方法如下:

       创建功能
            public boolean createNewFile()
            public boolean mkdir()
            public boolean mkdirs()
        删除功能
            public boolean delete()
        重命名功能
            public boolean renameTo(File dest)

参考用法:

public class FileDemo2 {
    public static void main(String[] args) throws Exception{
        //D:\bigdata31\day16\shujia.txt
        File file = new File("D:\\bigdata31\\day16\\shujia.txt");

        //public boolean createNewFile() 创建一个文件 若文件已经存在,返回false,否则创建文件返回true
        System.out.println(file.createNewFile());

        //public boolean mkdir() 创建单级目录
        File file1 = new File("D:\\bigdata31\\day16\\aaa\\bbb\\ccc");
       System.out.println(file1.mkdir());
        System.out.println(file1.createNewFile());
        System.out.println(file1.mkdir());

        //public boolean mkdirs() 创建多级目录
        System.out.println(file1.mkdirs());

        // public boolean delete() 既可以删除某一个文件也可以删除单级文件夹
        File file2 = new File("D:\\bigdata31\\day16\\bbb");
        System.out.println(file2.delete());

        File file3 = new File("D:\\bigdata31\\day16\\aaa");
        System.out.println(file3.delete());

        //public boolean renameTo(File dest) 对文件或者文件夹重命名
        File file4 = new File("D:\\bigdata31\\day16\\小小.txt");
        System.out.println(file.renameTo(file4));

    }
}
 判断功能
        public boolean isDirectory()  是否是文件夹
        public boolean isFile()          是否是文件
        public boolean exists()         是否存在
        public boolean canRead()    是否可读
        public boolean canWrite()   是否可写
        public boolean isHidden()   是否被隐藏

 

参考用法:

public class FileDemo3 {
    public static void main(String[] args) {
        File file4 = new File("D:\\bigdata31\\day16\\魏一民.txt");

        //public boolean isDirectory() 是否是文件夹
        System.out.println(file4.isDirectory());

        //public boolean isFile() 是否是文件
        System.out.println(file4.isFile());

        //public boolean exists() 是否存在
        System.out.println(file4.exists());

        //public boolean canRead() 是否可读
        System.out.println(file4.canRead());

        //public boolean canWrite() 是否可写
        System.out.println(file4.canWrite());

        //public boolean isHidden() 是否被隐藏
        System.out.println(file4.isHidden());
    }
}
 基本获取功能
        public String getAbsolutePath() 获取完整路径
        public String getPath()                获取相对路径
        public String getName()              获取文件或者文件夹的名字
        public long length()                     获取文件内容字节数
        public long lastModified()           最近一次修改时间 获取的是毫秒级别的时间戳

参考如下:

public class FileDemo4 {
    public static void main(String[] args) {
        File file = new File("src/com/shujia/day16/data/a.txt");

        System.out.println(file.getAbsolutePath()); // 获取完整路径

        System.out.println(file.getPath()); // 获取相对路径

        System.out.println(file.getName()); // 获取文件或者文件夹的名字

        System.out.println(file.length()); // 获取文件内容字节数

        File file1 = new File("D:\\bigdata31\\day16\\哈哈.txt");
        long l = file1.lastModified(); // 最近一次修改时间 获取的是毫秒级别的时间戳
        Date date = new Date(l);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日,  HH:mm:ss");
        String time = simpleDateFormat.format(date);
        System.out.println("上一次修改时间:"+time);

    }
}
 高级获取功能
        public String[] list()     列出当前目录下所有的文件及文件夹的名称,组成的数组
        public File[] listFiles() 列出当前目录下所有的文件及文件夹的File对象

参考如下:

public class FileDemo5 {
    public static void main(String[] args) {
        File file = new File("src/com/shujia/day16");


        //public String[] list() 列出当前目录下所有的文件及文件夹的名称,组成的数组
        String[] names = file.list();
        System.out.println(Arrays.toString(names));

        System.out.println("--------------------------");
        //public File[] listFiles() 列出当前目录下所有的文件及文件夹的File对象
        File[] files = file.listFiles();

        // 断言
        assert files!=null;

       for (File file1 : files) {
            System.out.println(file1);
        }

        if(files!=null){
            for (File file1 : files) {
                System.out.println(file1);
            }
        }
    }
}

 二、 字节输入流:FileInputStream

构造方法:
        FileInputStream(File file)
        FileInputStream(String name)

参考使用:

public class FileInputStreamDemo1 {
    public static void main(String[] args) throws Exception{
        //FileInputStream(File file) 将要进行读取的文件封装成File对象放入到构造方法
        //输入必须要求目标文件要已经存在,不然报错
       File file = new File("src/day16/data/a3.txt");
      FileInputStream fis = new FileInputStream(file);

        //FileInputStream(String name)
        FileInputStream fis = new FileInputStream("src/day16/data/a3.txt");


        fis.close();
    }
}

 FileInputStream读数据的方法:
        public int read()
        public int read(byte[] b)

参考使用:

public class FileInputStreamDemo2 {
    public static void main(String[] args) throws Exception {
        //创建字节输入流对象
        FileInputStream fis = new FileInputStream("src/com/shujia/day16/data/a3.txt");

        //public int read() // 一次只读取一个字节
        System.out.println((char) fis.read());
       System.out.println((char) fis.read());
        System.out.println((char) fis.read());
       System.out.println((char) fis.read());
       System.out.println(fis.read());
       int i = 0;
        while ((i = fis.read()) != -1) {
          System.out.print((char) i);
     }

        //public int read(byte[] b)
        //创建一个字节数组
        byte[] bytes = new byte[1024];
        int length = fis.read(bytes); // 返回的是实际读取到的字节数
        //字节数组转字符串
        String s = new String(bytes,0,length);
        System.out.println(s);

        byte[] bytes = new byte[2];
       //第一次读
       int length = fis.read(bytes); // 返回的是实际读取到的字节数
        //字节数组转字符串
        String s = new String(bytes,0,length);
        System.out.print(s);

        //第二次读
        int length2 = fis.read(bytes); // 返回的是实际读取到的字节数
        //字节数组转字符串
        String s2 = new String(bytes,0,length2);
       System.out.print(s2);
        //第三次读
       int length3 = fis.read(bytes); // 返回的是实际读取到的字节数
        //字节数组转字符串
       String s3 = new String(bytes,0,length3);
       System.out.print(s3);

        //使用while循环读取
        byte[] bytes = new byte[1024];
        int length = 0;
        while ((length = fis.read(bytes)) != -1) {
            String s = new String(bytes, 0, length);
            System.out.print(s);
        }


        //释放资源
        fis.close();
    }
}

 三、 字节输出流:FileOutputStream

FileOutputStream:
        构造方法:
            FileOutputStream(File file)
            FileOutputStream(String name)

参考方法:

public class FileOutputStreamDemo1 {
    public static void main(String[] args) throws Exception{
        //FileOutputStream(File file) 需要先将目标文件封装成一个File对象放入到构造方法
//        File file = new File("src/day16/data/a2.txt");
//        //若写入的目标文件不存在的话,会自动创建一个
//        FileOutputStream fos = new FileOutputStream(file);

        //FileOutputStream(String name)
        FileOutputStream fos = new FileOutputStream("src/day16/data/a2.txt");
        System.out.println(fos);


    }
}

 FileOutputStream写数据的方法:

    public void write(int b)
    public void write(byte[] b)
    public void write(byte[] b,int off,int len)

参考使用:

public class FileOutputStreamDemo2 {
    public static void main(String[] args) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("src/com/shujia/day16/data/a3.txt");

            //public void write(int b)
            //写一个字节
//             fos.write(97);
//             fos.write(98);
//             fos.write(99);
//             fos.write(100);

            //public void write(byte[] b) // 一次写一个字节数组
            byte[] bytes = {97, 98, 99, 100, 101, 102, 103};
//            fos.write(bytes);

            //public void write(byte[] b,int off,int len) 一次写字节数组的一部分
            fos.write(bytes,2,3);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //释放写数据资源
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
        1、怎么实现追加写?
        2、怎么实现换行?

参考使用:

public class FileOutputStreamDemo3 {
    public static void main(String[] args) throws Exception {
        //若文件已经存在,会将文件中的内容清空,若想要实现追加,在传入路径之后,append属性给true
        FileOutputStream fos = new FileOutputStream("src/com/shujia/day16/data/a3.txt",true);

        fos.write("\r\n".getBytes());

        fos.write(110);
        fos.write(111);
        fos.write(112);



        fos.close();

        //释放资源之后无法再继续使用了
//        fos.write(113);


    }
}

四、缓冲(字节)输入输出流:

缓冲(字节)输入流:BufferedInputStream

创建对象的方式:BufferedInputStream bis = new BufferedInputStream(new FIleInputStream("路径"))

特点:

缓冲(字节)输出流:BufferedOutputStream

创建对象的方式:  BufferedOutputStream bos = new BufferedOutputStream(new   FileOutputStream("路径"))

特点:

五、字符输入和输出流

抽象父类:(输入父类)Reader、(输出父类)Writer

字符输入流的具体实现子类和用法:

字符输入流:InputStreamReder

字符缓冲(输入)流的具体实现子类和用法:

缓冲流:BufferedReder

字符输出流的具体实现子类和用法:

字符输出流:InputStreamWriter

注意:简化版后的字符缓冲输出流,就不能添加或设定字符集,有没有append属性来添加true

缓冲流:BufferedWriter

  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的K8409

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值