其他分享
首页 > 其他分享> > 小白学IO,你学废了吗

小白学IO,你学废了吗

作者:互联网

文章目录

IO

一,File类
File类是以抽象的方式代表文件名和目录路径名,主要用于 文件和目录的创建、查找和删除等。
File对象代表磁盘中实际存在的文件和目录。
常用方法

方法名描述
String getName()获取文件(夹)名
String getPath()获取文件(夹)路径
boolean exists()文件(夹)是否存在
boolean isFile()是否是一个文件
boolean isDirectory()是否是一个目录(文件夹)
boolean createNewFile()创建一个文件
boolean mkdir()创建一个具体的文件夹
boolean mkdirs()创建多级文件夹
boolean delete()删除某个文件(夹)
String [] list()返回某个文件夹下的所有文件(夹)名
File [] listFiles()获取某个文件夹下所有的文件(夹)

使用步骤

//常用构造方法
new File(File parent,String child);
new File(String parent,String child);
new File(String pathName);

public void test() throws IOException {
     //方式一:一个完整路径
        //文件夹或 目录
        File f1 = new File("D:\\IdeaWork\\day16-java\\src\\file");
        //文件
        File f2 = new File("D:\\IdeaWork\\day16-java\\src\\file/Hello.java");
    //方式二:父路径和子路径
        File f3 = new File("D:\\IdeaWork\\day16-java\\src\\", "file");
        File f4 = new File("D:\\", "IdeaWork\\day16-java\\src\\file");
    //方式三:File对象,子文件名
        File f5 = new File("D:\\IdeaWork\\day16-java\\src\\");
        File f6 = new File(f5, "file");
        File f7 = new File(f5, "file/Hello.java");

        System.out.println(f1.getName());//获取文件(夹)名
        System.out.println(f1.getPath());//获取文件(夹)路径
        System.out.println(f1.exists());//判断文件是否存在
        System.out.println(f2.isFile());//判断是一个文件
        System.out.println(f1.isDirectory());//是否是一个目录(文件夹)
        File f8 = new File(f5, "com");
        if (!f8.exists()){
            f8.mkdir();//创建一个具体的文件夹  mkdirs是创建多级文件夹
        }
        System.out.println(f8.exists());
        File f9 = new File(f8, "hello");
        if (!f9.exists()){
            f9.createNewFile();//创建一个文件
        }
        System.out.println(f8.exists());
        System.out.println(f9.delete());

//循环输出jdk的目录
        File fl = new File("C:\\Program Files\\Java\\jdk1.8.0_251");
        File[] fl1 = fl.listFiles();
        for (File file : fl1) {
            System.out.println(file.getName());
        }
    }

 @Test//递归输出D盘作业文件夹下的所有文件,以及子文件夹中所有的文件
    public void test1(){
        File f = new File("D:\\作业");
        showFile(f);
    }
    public void showFile(File f){
        if (f.isDirectory()){//文件夹
            System.out.println(f.getName()+":是一个文件夹");
            File[] files = f.listFiles();
            for (File file : files) {
                showFile(file);
            }
        }else {//文件
            System.out.println(f.getName()+":是一个文件");
        }
    }

二,字节流
字节输入流

//构造方法
new FileInputStream(String文件路径);
new FileInputStream(File文件对象);

使用步骤:
1.创建输入流流对象
2.调用read方法
3.关闭流对象

read方法:从字节输入流中读取数据

//无参,返回一个字节,表示读取一个字节数据
    int read() 
//传入一个字节数组,表示将读到的字节存入数组中,返回存入的字节个数
    int read(byte[] bytes) 
//传入一个字节数组,数组下标,存放个数,表示将读到的字节存入数组,从数组的第off+1个元素开始存放,共存放len个。返回实际存入的字节个数。
    int read(byte[] b,int off,int len)

//常用方法
//返回字节输入流中还有多少个可以读取的字节个数
int available();


 @Test//字节输入流
        public void test() throws Exception {
            //1.创建流对象
            FileInputStream f = new FileInputStream("C:\\Users\\admin\\Desktop/a.txt");
            System.out.println(f.available());//返回流中剩余可读字节个数
            //2.调用read方法--从文件流f中读取数据
            //读取多个字节--存入字节数组
            byte [] b=new byte[100];
            f.read(b);
            System.out.println(Arrays.toString(b));
            //读取多个字节,有个数限制
            // f.read(b,3,3);
            //System.out.println(Arrays.toString(b));
            //int r = f.read();//读取一个字节
            //System.out.println(r);
        }

字节输入流
构造方法

new FileOutputStream(String);
new FileOutputStream(String,Boolean);
new FileOutputStream(File);
new FileOutputStream(File,Boolean);

使用步骤
1.创建输出流对象
2.调用write方法
3.关闭流对象

//write方法:向字节输出流中写入数据
  //写入一个字节数据b
void write(int b); 
    //将字节数组b写入输出流中
void write(byte[] b);
    //从字节数组b的第off+1个元素开始,向输出流中写入len个字节
void write(byte[] b,int off,int len);

@Test//字节输出流
        public void test1() throws Exception {
            File f = new File("C:\\Users\\admin\\Desktop/b.txt");
            //1.创建流对象
            FileOutputStream fos = new FileOutputStream(f);
            //2。调用write方法
            byte [] b={97,97,97,98};
            fos.write(b,1,3);
            //3.关闭流对象
            fos.close();


        }
    @Test//字节输出流案例
    public void test2() throws Exception {
        FileOutputStream f = new FileOutputStream("C:\\Users\\admin\\Desktop/c.txt");
        String s = "I know,I'm not good enough,but I'm the only one in the world.Please cherish it.";
        byte [] bytes=s.getBytes();
        f.write(bytes);
        //复制   先写输入流 然后输入到数组 在写输出流 输出到、
        FileInputStream f1 = new FileInputStream("C:\\Users\\admin\\Desktop/c.txt");
        FileOutputStream f2 = new FileOutputStream("C:\\Users\\admin\\Desktop/b.txt");
        /*System.out.println(f1.available());
        byte [] b=new byte[100];
        f1.read(b);

        f2.write(b);*/
        int b = 0;//b表示读到的字节内容,如果读完了,返回-1
        while ((b = f1.read())!=-1){
            f2.write(b);
        }
    }

带缓冲区字节输入流和输出流

BufferedInputStream
BufferedOutputStream

@Test
    public void test() throws Exception {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\admin\\Desktop/a.txt"));
        bos.write("hello".getBytes());
        bos.flush();//冲洗缓冲区
        bos.close();//关闭,有冲洗缓冲区功能
    }

三,字符流
字符输入流
构造方法

new FileReader(String);
new FileReader(File);

使用步骤
1.构建流对象
2.调用read方法
3.关闭流对象

//read方法:从字符输入流中读取字符数据
//读取一个字符,并返回读到的字符,如果没有读到,返回-1
int read();
    //读取到的字符存入字符数组c
read(char[] c);
    //读取到的字符存入字符数组c,从下标offset开始,个数为len
read(char[] c,int offset,int len);

@Test//字符输入流
    public void test2() throws Exception {
        FileReader fr = new FileReader("C:\\Users\\admin\\Desktop/c.txt");
       /* int r=0;
        while ((r=fr.read())!=-1){
            System.out.println((char)r);
        }*/
        char [] cs = new char[100];
        fr.read(cs);
        System.out.println(cs);
    }

字符输出流
构造方法

new FileWriter(String);
new FileWriter(String,boolean);
new FileWriter(File);
new FileWriter(File,boolean);

//write方法:向字符输出流中写入字符数据
//写入一个字符
    void write(int c) 
//写入一个字符串
    void write(String str)
//写入一个字符数组
    void write(char[] c)
//写入一个字符串,从off开始,写len个
    void write(String str,int off,int len)
//写入一个字符数组,从off开始,写len个
    void write(char[] c,int off,int len)

@Test//字符输出流
    public void test1() throws IOException {
        //还可以在地址后面加 ,true  表示追加
        FileWriter fw = new FileWriter("C:\\Users\\admin\\Desktop/c.txt");
            fw.write("喧闹任其喧闹,自有我自为之,我自风情万种,与世无争");
        fw.flush();
    }


//字符缓冲流
@Test
    public void test3() throws IOException {
        BufferedWriter bfw = new BufferedWriter(new FileWriter("C:\\Users\\admin\\Desktop/c.txt"));
        long a = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            bfw.write("别人可以替你开车,但不能替你走路;可以替你做事,但不能替你感受。人生的路要靠自己行走,成功要靠自己去争取。天助自助者,成功者自救。");
        }
        long b = System.currentTimeMillis();
        System.out.println(b-a);
    }

其它流
1.缓冲流
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
2.转换流
InputStreamReader
OutputStreamWriter
3.数据流
DataInputStream
DataOutputStream
4.对象流
ObjectInputStream
ObjectOutputStream

标签:你学,字节,IO,System,int,小白学,File,println,new
来源: https://blog.csdn.net/weixin_51403996/article/details/109546892