【java笔记】File类,字节流

本文详细介绍了Java中的File类,包括文件和文件夹的创建、获取、删除等操作,以及如何通过递归实现文件夹内容的遍历。接着,文章深入探讨了字节流的概念,讲解了字节流的写入和读取数据的方法,包括异常处理和字节缓冲流的使用,并给出了文件和图片的复制示例。

1.File类
1.1 File类的概述和使用

package demo01IO;
/*
File类:路径和文件名的抽象表示
 */
import java.io.File;

public class Demo01File {
    public static void main(String[] args) {
        File f1=new File("E://itcast");
        System.out.println(f1);

        File f2=new File("E://itcast","java.text");
        System.out.println(f2);

        File f3=new File("E://itcast");
        File f4=new File(f3,"java.txt");
        System.out.println(f4);

    }
}

1.2 创建文件夹或文件

package demo01IO;

import java.io.File;
import java.io.IOException;

/*
创建文件和目录
 */
public class Demo02File {
    public static void main(String[] args) throws IOException {
        //创建文件
        File f1 =new File("E:\\java.txt");
        System.out.println(f1.createNewFile());

        //创建单极目录
        File f2=new File("E:\\beifen\\nihao");
        System.out.println(f2.mkdir());

        //创建多级目录
        File f3=new File("E:\\ni\\shi\\shui");
        System.out.println(f3.mkdirs());
    }
}

1.3 文件的获取和判断

package demo01IO;

import java.io.File;

/*
File的判断和获取功能
 */
public class Demo03File {
    public static void main(String[] args) {
        File f1 =new File("E:\\beifen\\java.txt");
        //判断是否为文件
        System.out.println(f1.isFile());
        //判断是否为目录
        System.out.println(f1.isDirectory());
        //判断是否存在
        System.out.println(f1.exists());
        /*
        true
        false
        true
         */

        //获取绝对路径
        System.out.println(f1.getAbsoluteFile());
        //获取文件名
        System.out.println(f1.getName());
        //路径名字符串
        System.out.println(f1.getPath());
        /*
        E:\beifen\java.txt
        java.txt
        E:\beifen\java.txt
         */

        //获取文件夹的文件名(String格式)
        File f2=new File("E:\\beifen");
        String[] list = f2.list();
        for(String s:list){
            System.out.println(s);
        }
        /*
        HUAWEI Mate 20 Pro_2021-03-20 16.48.42
        images
        java.txt
        nihao
        WeiXin
         */

        //获取文件夹的文件名(文件格式)
        File[] files = f2.listFiles();
        for(File f:files){
            if(f.isFile()){
                System.out.println(f.getName());
            }
        }
        /*
        java.txt
         */

    }
}

1.4 File删除操作

package demo01IO;

import java.io.File;
import java.io.IOException;

public class Demo04FileDelete {
    public static void main(String[] args) throws IOException {
        File f1=new File("java.txt");
        //System.out.println(f1.createNewFile());
        //删除当前文件
        //System.out.println(f1.delete());
        File f2=new File("itcast");
        System.out.println(f2.mkdir());
        //删除当前文件夹
        //System.out.println(f2.delete());

        File f3=new File("itcast\\java.txt");
        System.out.println(f3.createNewFile());

        System.out.println(f3.delete());
        System.out.println(f2.delete());


    }
}
/*
false
false
true
true
 */

注:当文件夹下有内容时,不能直接删除文件夹。
1.5 递归

package demo01IO;
/*
递归:方法调用自己
用递归方法和普通方法求斐波那契数列
 */
public class Demo05DiGui {
    public static void main(String[] args) {
        //普通方法
        int[]arr=new int[100];
        arr[0]=1;
        arr[1]=1;
        int n=20;
        for(int i=2;i<n;i++){
            arr[i]=arr[i-1]+arr[i-2];
        }
        System.out.println(arr[19]);
        System.out.println(f(20));
    }
    //递归
    public static int f(int m){
        if(m==1||m==2){
            return 1;
        }else{
            return f(m-1)+f(m-2);
        }
    }

}
/*
6765
6765
 */

1.6 递归去求阶乘

package demo01IO;
/*
递归求阶乘
 */
public class Demo06DiGui {
    public static void main(String[] args) {
        System.out.println("5的阶乘是:"+jc(5));
    }
    public static int jc(int n){
        if(n==1){
            return 1;
        }else{
            return n*jc(n-1);
        }
    }
}
//5的阶乘是:120

1.7 递归输出文件夹下的所有文件

package demo01IO;

import java.io.File;

/*
遍历目录
 */
public class Demo07DiGui {
    public static void main(String[] args) {
        File f1=new File("E:\\work");
        getFile(f1);
    }
    public static void getFile(File f){
        File[] files = f.listFiles();
        if(files!=null){
            for(File fi:files){
                if(fi.isDirectory()){
                    getFile(fi);
                }else{
                    System.out.println(fi.getName());
                }
            }
        }
    }
}

2 字节流
2.1 IO流的概述
字符流:打开记事本看得懂
字节流:记事本上看不懂的
2.2 使用字节流写入数据

package demo02IO;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
使用字节流写数据
 */
public class Demo01 {
    public static void main(String[] args) throws IOException {
        //创建字节流输出对象
        FileOutputStream fos=new FileOutputStream("fos.txt");

        //输入数据
        fos.write(97);

        //关闭字节流,释放资源
        fos.close();
    }
}

2.3 字节流写入的三种方式

package demo02IO;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
字节流写入的3种方式
 */
public class Demo02 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos2=new FileOutputStream("fos2.txt");

        //写入
        fos2.write(97);

        byte[] bys = "刘老根".getBytes();
        fos2.write(bys);

        byte[] bys2 = "abcde".getBytes();
        fos2.write(bys2,2,3);

        fos2.close();

    }
}

2.4 字节流写入数据的两个注意事项

package demo02IO;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
字节流写数据的2个小问题
 */
public class Demo03 {
    public static void main(String[] args) throws IOException {
        //追加写入
        FileOutputStream fos3=new FileOutputStream("fos3.txt",true);
        //换行
        for(int i=0;i<10;i++){
            fos3.write("hello".getBytes());
            fos3.write('\n');
        }
        fos3.close();
    }
}

2.5 字节流写入数据时加入异常处理

package demo02IO;

import java.io.FileOutputStream;
import java.io.IOException;

/*
字节流写数据加入异常处理
 */
public class Demo04 {
    public static void main(String[] args) {
        FileOutputStream fos=null;
        try {
            fos=new FileOutputStream("fos.txt");
            fos.write(97);

        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }

    }
}

2.6 字节流读数据

package demo02IO;

import java.io.FileInputStream;
import java.io.IOException;

/*\
字节流读数据
 */
public class Demo05IORead {
    public static void main(String[] args)throws IOException {

        FileInputStream fis=new FileInputStream("fos.txt");
        int by;
        while((by=fis.read())!=-1){
            System.out.print((char)by);
        }
    }
}
/*
a
xiaoming
shunfeng
 */

2.7 复制文本文件

package demo02IO;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
字节流复制文本文件
 */
public class Demo06CopyTxt {
    public static void main(String[] args) throws IOException {
        //获取初始路径
        FileInputStream fis=new FileInputStream("E:\\work\\三方协议.txt");
        //获取复制后的路径
        FileOutputStream fos=new FileOutputStream("sanfang.txt");
        //读取并写入
        int by;
        while((by=fis.read())!=-1){
            fos.write(by);
        }
        fis.close();
        fos.close();
    }
}

2.8 字节流读取字节数组

package demo02IO;

import java.io.FileInputStream;
import java.io.IOException;

/*
字节流读取字符数组
 */
public class Demo07IORead {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("fos.txt");
        byte[] by=new byte[1024];//一般为1024的整数倍
        int len;
        while((len=fis.read(by))!=-1){
            System.out.println(new String(by));
        }
        //释放资源
        fis.close();
    }
}
/*
a
xiaoming
shunfeng    
 */

2.9 复制图片

package demo02IO;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
字节流复制图片
 */
public class Demo08IOImage {
    public static void main(String[] args) throws IOException {
        //创建输入流
        FileInputStream fis=new FileInputStream("C:\\Users\\49161\\Pictures\\1.jpg");
        //创建输出流
        FileOutputStream fos=new FileOutputStream("1.jpg");
        //使用字节数组的方式来复制
        byte[]bys=new byte[1024];
        int len;
        while((len=fis.read(bys))!=-1){
            fos.write(bys);
        }
        fos.close();
        fis.close();
    }
}

2.10 字节缓冲流读写数据

package demo03;

import java.io.*;

/*
字节缓冲流读写数据
 */
public class Deom01 {
    public static void main(String[] args) throws IOException {
        //写入
        //BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("bos.txt"));
        //bos.write("hello".getBytes());

        //读取
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("bos.txt"));
        byte[]bys=new byte[1024];
        int len;
        while((len=bis.read(bys))!=-1){
            System.out.println(new String(bys));
        }



        bis.close();

    }
}

字节流复制视频的两种方式:

package demo03;

import java.io.*;

//字节流复制视频
public class Demo01 {
    public static void main(String[] args) throws IOException {
        long startTime=System.currentTimeMillis();
        //method1();//共历时1995毫秒
        method2();//共历时316毫秒

        long endTime=System.currentTimeMillis();
        long tim=endTime-startTime;
        System.out.println("共历时"+tim+"毫秒");
    }
    public static void method1() throws IOException{
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:\\Users\\49161\\Videos\\test.mp4"));
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("test.mp4"));
        int by;
        while((by=bis.read())!=-1){
            bos.write(by);
        }
        bis.close();
        bos.close();
    }
    public static void method2() throws IOException{
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:\\Users\\49161\\Videos\\test.mp4"));
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("test.mp4"));
        byte[]bys=new byte[1024];
        int len;
        while((len=bis.read(bys))!=-1){
            bos.write(bys,0,len);
        }
        bis.close();
        bos.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值