Java核心编程 day6 (File类和IO流)

一、File类

  1. File类:描述了文件或文件夹(目录)的属性,用于提供对文件操作API

(1)创建File对象

File f = new File("G:\\2023_Java\\Java_Basic_Core\\src\\test");//绝对路径

File f2 = new File("test2/test");//相对路径

  1. 文件类API的使用:

(1)length();获取文件大小,UTF-8中文占3个字节,GBK中字符占两个字节,字母和数字都占一个字节。

System.out.println(f.length());

System.out.println(f2.length());//不能表示文件的大小

(2)isFile();判断是否是文件

System.out.println(f.isFile());//true

System.out.println(f2.isFile());//false

(3)isDirectory()判断是否是文件夹

System.out.println(f.isDirectory());//false

System.out.println(f2.isDirectory());//true

(4)getParent()获取父目录的名称

System.out.println(f.getParent());//test2

System.out.println(f2.getParent());//null

(5)File getParentFile();获取的是父目录的对象

File parentFile = f.getParentFile();

(6)createNewFile()创建新的文件,如果文件已经存在,则返回false

//1.创建要创建的文件的File对象

File newFile = new File("test2/test2.txt");

//2.调用createNewFile();方法创建文件

System.out.println(newFile.createNewFile());

(7) boolean mkdir();创建单级文件夹;mkdirs();创建多级文件夹

//1.创建要创建的文件的File对象

File newDir = new File("test2/hello/hello2");

//2.调用mkDir()方法创建文件

System.out.println(newDir.mkdir());

(8)delete();删除文件或文件夹,如果文件夹不为空无法删除

(9)String[] list;返回指定目录下的所有一级文件或者文件夹的名称数组

File f4 = new File("src/day5");

System.out.println("遍历文件夹");

String[] names = f4.list();

for (String name : names) {

System.out.println(name);

}

(10)ListFiles();返回指定目录下的所有一级文件或文件夹的File对象

File[] files = f4.listFiles();

System.out.println("遍历文文件名称");

for (File file : files) {

if(file.isFile()){

System.out.println(file.getName());

}

}

二、IO流

  1. 概述

在电脑程序中,对数据的传入,可以看成数据的流动,根据流动的方向分为输入流和输出流;

java中的IO就是对数据进行输入,输出操作,数据的I/O操作依靠流来实现,根据数据单位的不同又将流分为字节流和字符流。

ps:一切文件的数据(文本、图片、视频)在存储时,都是以二进制的形式进行保存,都是以字节为单位,因此通过字节流可以操作任意的数据

  1. 字节流

根据方向分为:

(1)输出流:OutputStream类,是一个抽象类,不能创建对象

它的子类:FileOutputStream类

构造函数:public FilOutputStream(String path)

Public FileOutputStream(File f)

 //1、文件字输出流的使用
    public static void test01()  {
        FileOutputStream fos =null;
        //1.创建指定文件的字节输出流
        try {
            fos = new FileOutputStream("test2/test.txt",true);//true表示追加在文本后面,而不是覆盖
            //2.调用write方法,将内容写到文件中,使用ASC码
            fos.write(97);

            //3.调用write(byte[] b) 可以一次性写入多个数据
            String str="hello,world";
            //getBytes()将字符串转换成字节数组
            fos.write(str.getBytes());
            fos.write(10);
            fos.write("你好".getBytes());


        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭流
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

(2)输入流:InputStream类 是一个抽象类,不能创建对象

它的子 类:FileOutpuStream类

构造函数:public FileInputStrEam(String path)

public FileInputStrEam(File f)

 //2、文件字输入流的使用
    public static void test02(){
        FileInputStream fis=null;
        try{
            //1.创建指定文件的字节输入流
            fis = new FileInputStream("test2/test.txt");

            //2.read();读取一个数据,获取得到ASC码,当数据读取完后,返回的是-1
//            int data = fis.read();
//            System.out.println((char)data);
            int data;//用于接受读取到的数据
//            while((data=fis.read())!=-1){
//                System.out.println((char)data);
//            }

            //3.read(byte[] b);一次性读取多个数据,存储到byte数组中,返回值为读取到的数据的有效个数,读完是返回-1
            byte[] b = new byte[1024];//长度一般设置为1024 的倍数
            int len;//表示读取到的有效数据个数
            while((len=fis.read(b))!=-1){
                //通过newString(byte[] b,int off,int len)将字节数组转换成字符串
//                String s = new String();
                System.out.println(new String(b));
                System.out.println(new String(b,0,len));//读取了多少个就转多少个 没必要把使用的空间都一起转换
            }

//            int result = fis.read(b);
//            System.out.println(result);

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }
  1. 字符流

根据方向分为:

(1)输出流:writer类,是一个抽象类,不能创建对象

子类:FileWriter

具体使用如下:

//3、文件字符输出流的使用
    public static void test03(){
        //1.创建指定文件输出流的对象
        FileWriter fw=null;
        try{
            fw = new FileWriter("test2/test2.txt",true);
            //2.write(String str);将字符串写到文件中
            fw.write("jjjjjkkoioio");
            fw.write("  java");

            //3.writer(char[] c)
            char[] c={'s','d','j'};
            fw.write(c);
            fw.flush();//将缓冲区内容加载到文件中
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                //3.关闭流,同时将缓冲区内容加载到文件中
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

(2)输入流:Reader

子类:FileReader

具体使用如下:

//4、文件字符输入流的使用
    public static void test04(){
        try{
            //1.创建指定文件的字符输入流对象
            FileReader fr = new FileReader("test2/test2.txt");
            //2.使用read()循环读取文本内容
            int data;
            while((data = fr.read())!=-1){
                System.out.println((char)data);
            }
            //3.read(char[] c
            int len;//用于接收读取到的有效数据个数
            char[] c = new char[1024];//用于存储每次读取到的数据
            while((len=fr.read(c))!=-1){
                //将char数组转换成String newString(char[] c,int off,int len)
                System.out.println(new String(c,0,len));
            }

        }catch(Exception e){
            e.printStackTrace();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值