Java基础第十七天 - I/O流

一、Java中对文件的读取写入,我们称为IO操作

        IO: 用来进行设置之间的数据传输

        I: input 输入

        O: output 输出

        IO

Java中I/O操作主要是指使用 java.io 包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出 数据。

File文件

在Java中提供了一个类 File 供我们使用;

File : 文件和目录(文件夹)路径名的抽象表示

构造方法:

File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。

File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。

//文件路径 D:\demo\a.txt


//File(String parent, String child) 
File file = new File("D:\\demo", "a.txt") ;




//File(String pathname) 

File file = new File("D:\\demo\\a.txt") ;



//File(File parent, String child) 

File fileParent = new File("D:\\demo");

File file = new File(fileParent , "a.txt"); 

File类提供的方法

long length() 获得文件字节数

如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下

创建

boolean createNewFile()创建一个新文件 ; 注:如果给定目录不存在,会报错

boolean mkdir() / mkdirs()创建新的目录

删除

boolean delete() 删除文件或者目录 注:

注:

  1. Java中的删除不走回收站

  2. 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹

void deleteOnExit() 虚拟机退出时删除文件或者目录

判断

boolean exists() 判断当前文件或者目录是否存在

boolean isFile() 判断File对象代表的是否是一个文件

boolean isDirectory() 判断File对象代表的是否是一个目录

boolean isHidden()判断File对象代表的是否是一个隐藏文件

重命名

public boolean renameTo(File dest) : 重命名

如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
路径以盘符开始︰绝对路径   c:\\a.txt
路径不以盘符开始∶相对路径   a.txt

获取信息

String getPath() 返回当前File对象的字符串路径 注: 给的什么路径,就显示什么值

String getName()返回当前File对象的文件名或者目录名

String getParent()返回当前File对象的父级目录 注: 根据我们给定字符串路径,去看父级

String getAbsolutePath()返回当前File对象的绝对路径

获取子目录及文件(数组)

String[] list()返回当前File对象包含的子目录以及文件

File[] listFiles()返回当前File对象包含的子目录以及文件

long lastModified()返回最后的修改时间

思考 : 找一个文件目录下,所有的文件

递归

递归操作不是循环,是反复调用方法,所有在数字很大的时候不建议使用递归。

比如求 5!使用递归

他会反复调用方法,反复将方法进栈。

I/O的分类

根据数据的流向分为:输入流输出流

  • 输入流 :把数据从其他设备上读取到内存中的流。

  • 输出流 :把数据从内存 中写出到其他设备上的流。

根据数据的类型分为:字节流字符流

  • 字节流 :以字节为单位,读写数据的流。

  • 字符流 :以字符为单位,读写数据的流。

关于什么时候用字符流和字节流,可以用记事本来判断,字符流可以用于所有文件,而字符流传输的数据用记事本打开不会乱码,那就可以用字符流,乱码了就不能用字符流。

注意:输入和输出是根据Java程序而言,硬盘向Java内存传入数据叫输入(input),Java内存输出数据到硬盘叫输出(output)。

FileInputStream(字节输入流)

构造方法

FileInputStream(File file)

FileInputStream(String name)

方法:

read(); //一个一个读

通过byte数组读取数据的原理

FileOutputStream(字节输出流)

构造方法

FileOutputStream(File file) 创建文件输出流以写入由指定的 File对象表示的文件。

FileOutputStream(File file, boolean append) : 当append为true,表示 将写入的字节添加到末尾,而不是开始

创建文件输出流以写入由指定的 File对象表示的文件。

FileOutputStream(String name) 创建文件输出流以指定的名称写入文件

FileOutputStream(String name, boolean append) : 当append为true,表示 将写入的字节添加到末尾,而不是开始

创建文件输出流以指定的名称写入文件。

方法

write(int )

write(byte[])

write(byte[],int off, inlen )

package mytest;

import java.io.*;

public class my_inputio {
    public static void main(String[] args) throws IOException {
        T t = new T();
//        //初级读取文件
//        t.chujiduqu();
//
//        //初级写入文件
//        t.chujixieru();


        //初级将 b.txt 内容复制到 a.txt
        t.chujicope();


        //高级 b.txt 内容复制到 a.txt  (加了缓冲,提高了速度)
    }
}


class T{
    public  void chujiduqu() throws IOException {
        //        1.创建对象
        FileInputStream in = new FileInputStream("a.txt");
//        2.实现方法
        while (in.read()!=-1){
            System.out.print(in.read());
        }
//        3.关闭
        in.close();
    }



    public void chujixieru() throws IOException{
//        1.创建对象
        FileOutputStream ou = new FileOutputStream("b.txt");
        //只能写整数或者字符
 //       2.实现方法
        ou.write(97);
        ou.write(98);
        ou.write('c');
//        3.关闭
        ou.close();
    }

    public void chujicope()throws IOException{
//        1.创建对象
        FileInputStream fiin = new FileInputStream("b.txt"); //读取
        // true  表示 b.txt 的内容追加在a.txt的后面,不写则是将a.txt的内容覆盖
        FileOutputStream fiou = new FileOutputStream("a.txt",true);//写入
//        2.实现方法
        int a=fiin.read();
//        int a;    这样写法看着高级
//        while (a=fiin.read()!=-1)
        while (a!=-1){
            fiou.write(a);
            a=fiin.read();
        }

//        3.关闭
        fiin.close();
        fiou.close();
    }

    public void gaoji() throws IOException{
//        1.创建对象
//        FileInputStream fileInputStream = new FileInputStream("b.txt");
//        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        //匿名对象
        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("b.txt"));

//        FileOutputStream fileOutputStream = new FileOutputStream("a.txt");
//        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
        //匿名对象
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("a.txt"));


//        2.实现方法
        //采用字符数组,加快速度
        byte [] bytes = new byte[1024];
        //定义一个存储数组长度
        int len;
        while ((len=bufferedInputStream.read())!=-1){
            //输出
            bufferedOutputStream.write(bytes,0,len);
            bufferedOutputStream.flush();
        }

//        3.关闭
        bufferedInputStream.close();
        bufferedOutputStream.close();
    }
}

转换流:

OutputStreamWriter

InputStreamReader

将字节流,转字符流

//字符和字节流的区别?
    //字节流的单位是字节,字符流的单位是字符
    //字符流=字节流+编码 字符流只能处理字符
    //字符流是带缓冲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值