Java学习第十九天

这篇博客详细介绍了Java中File类的使用,包括如何通过构造方法创建File对象、理解绝对路径和相对路径的区别,以及如何进行文件的创建、删除、重命名等操作。此外,还讲解了IO流的基本概念,包括输入流和输出流,展示了字节流的使用示例。内容涵盖了Java基础操作,适合初学者学习。
摘要由CSDN通过智能技术生成

Java学习第十九天知识点(IO流)

File: 文件类
1.File的创建 - 构造方法
1) 参数传入文件路径
new File("")
2) 参数传入父路径 和 子路径
new File(“a”,“a.txt”)

注意:new 出来的File对象只是存在于JVM内存中的一个对象,和本地磁盘有没有这个文件,没有任何关系!!

2.路径:
1).绝对路径

	window:从盘符出发 C:\xx\xx(斜杠的话\\或者/或者//都可以)
	Linux: 从根目录开始(Users)   /

  例如: D:\Idea-workspace\api_2107\api_day10\a.txt

2).相对路径: 不固定的,会有一个参照对象
例如: D:\Idea-workspace\api_2107\api_day10\a.txt

  相对路径: a.txt

  参照路径(参考值): D:\Idea-workspace\api_2107\api_day10

  我们会把参考值称之为 - 当前目录

  [.]: 表示当前目录 
  [..]: 表示上一级目录, 现在的参考值的上一层

3.使用绝对路径的优势

优势: 位置永远不会出错(针对个人电脑)
缺点: 如果存放在别人电脑上的,绝对路径有可能会出错
所以通常来说哦,我们可以通过相对路径来获取到绝对路径,来保证稳定性。

4.通过相对路径获取到的绝对路径
1).getResource() - 【基于包下】

	xx.class.getResource("相对路径").getPath()
	xx.class -> 获取类的字节码文件对象
 String path= FileAPIDemo.class.getResource("IOliu/a.txt").getPath();//getFile也可以

2).getClassLorder() - 【基于src】

	xx.class.getClassLorder().getResource("相对路径").getPath()
String path= FileAPIDemo.class.getClassLoader().getResource("a.txt").getPath();//getFile也可以

3)两个方法的区别:

	得到的参考值不一样

4)理解:
①.类路径(classPath): src编译后的目录,也叫做编译根目录
②.以上两种方式得到的绝对路径,都是在编译后的根目录中,和src没有直接关系
③.在以后的开发中,我们一般是将文件存储在src下,因为src中的内容会自动编译到类路径中

5.常用API:

File getAbsoluteFile() - 获取绝对路径
boolean exists() - 判断该文件是否存在
boolean isDirectory() - 判断是否是目录
boolean isFile()  - 判断是否是文件
boolean createNewFile() - 创建文件
boolean mkdir() - 创建单层目录
boolean mkdirs() -创建多层目录
String getName() - 获取文件的名字
String getPath() - 获取文件路径名
boolean renameTo(File dest) - 从一个文件移动到另一个文件
String[] list() -列出file所有文件的名字
File[] listFiles() -列出file所有文件的对象
boolean delete()  
File[] listFiles(FileFilter filter)   
String  getParentFile()

对于API的相关测试:

/*
        1.创建两个文件对象,分别使用相对路径和绝对路径创建。
        2.检查D盘下是否存在文件a.txt,如果不存在则创建该文件。
        3.在D盘下创建一个名为bbb的文件夹。
        4.在D盘下创建一个名为ccc的文件夹,要求如下:
        1.ccc文件夹中要求包含bbb子文件夹
        2.bbb子文件夹要求包含aaa文件夹
        5.获取D盘aaa文件夹中b.txt文件的文件名,文件大小,
        文件的绝对路径和父路径等信息,并将信息输出在控制台。
        6.1.判断File对象是否是文件,是文件则输出:xxx是一个文件,否则输出:xxx不是一个文件。
        6.2.判断File对象是否是文件夹,是文件夹则输出:xxx是一个文件夹,否则输出:xxx不是一个文件夹。(xxx是文件名或文件夹名)
        7.删除文件 例如: a.txt
        8.删除目录[空目录] 例如: dir
        9.删除目录[非空目录] 例如: test/a/a.txt*/
public class ques01 {
    public static void main(String[] args) throws IOException {
        File file = new File("a.txt");
        File file1 = new File("E:\\Java\\MyJavaProject\\MyProject\\week5\\day04\\b.txt");

        //  \\或者/或者//都可以
        File file2 = new File("D:\\a.txt");
        boolean newFile2=file2.createNewFile();
        System.out.println(newFile2);

        File file3 = new File("D:/b");
        file3.mkdir();

        File file4 = new File("D:\\ccc\\bbb\\aaa");
        file4.mkdirs();

        File file5 = new File("D:\\ccc\\bbb\\aaa\\b.txt");
        System.out.println(file5.getName());
        System.out.println(file5.length());
        System.out.println(file5.getAbsoluteFile());

        if (file.isFile()){
            System.out.println(file.getName()+"是一个文件");
        }else if (!file.isFile()){
            System.out.println(file.getName()+"不是一个文件");
        }
        if (file.isDirectory()){
            System.out.println(file.getName()+"是一个文件夹");
        }else if (!file.isDirectory()){
            System.out.println(file.getName()+"不是一个文件夹");
        }

        //boolean test=file2.delete();
        System.out.println(file2.delete());

        File file6 = new File("aaa");
        boolean test=file6.mkdir();
        System.out.println(test);
        file6.delete();

        File file7 = new File("ccc/bbb/aaa");
        boolean test1=file7.mkdirs();
        System.out.println(test);
       // deleteFile(file7);
        File file8 = new File("ccc");
        deleteDG(file8);
    }
    public static File deleteFile(File file){
        if (file.getParentFile()!=null){
            file.delete();
            return deleteFile(file.getParentFile());
        }
        file.delete();
        return null;
    }
    public static File delete(File file){
        File[] files = file.listFiles();
        for (File f:files) {
            if (f.isDirectory()){

            }
            else if (f.isFile()){
                f.delete();
            }
        }

        return null;
    }
    public static void deleteDG(File file){
        File[] files = file.listFiles();
        if (files!=null){
            //文件夹为空返回0 文件没有内容可能为null,所以要不等于null
            for (File f:files) {

                deleteDG(f);
            }
        }
        file.delete();

    }
}

IO流:

I -> Input 输入流(读文件)
	数据从文件中流向内存

O -> Output 输出流(写文件)
	数据从内存中流向文件

流:流向,把数据从一个地方带到另一个地方

字节输入流InputStream

字节输出流OutputStream

public class StreamDemo01 {
    @Test
    public void test01() throws IOException {
        /*
            FileOutputStream:
                如果文件不存在,则会自动创建新的文件
                如果文件存在,则不会在创建
         */
        FileOutputStream fos = new FileOutputStream(new File("b.txt"));
        //向文件中写内容
        //对应的就是 - ASCII码表
        fos.write(0);// 0 = 空字符串
        fos.write(48);// ASCII码表中的字符0
        fos.write(65);
        fos.write(97);
        // 32位
        //-1原码: 10000000 00000000 00000000 00000001
        //-1反码: 11111111 11111111 11111111 11111110
        //-1补码: 11111111 11111111 11111111 11111111
        // 写入 1个字节 = 8位
        // 写入低8位(所谓低8位就是最后面的8位) -> 11111111
        fos.write(-1);
        fos.write(256); //低8位 00000000
        //需要注意的是无法输入中文字符,但是可以打开文件直接输入中文(并以此获得字节码)
    }

    @Test
    public void test02() throws IOException {
        //FileNotFoundException -> 文件找不到异常
        //如果写文件时找不到,会创建一个空的文件出来,如果读取找不到就会抛出异常
        FileInputStream fis =
                new FileInputStream(new File("b.txt"));
        int read = fis.read();
        System.out.println(read);
        int read1 = fis.read();
        System.out.println(read1);
        int read2= fis.read();
        System.out.println(read2);
        int read3= fis.read();
        System.out.println(read3);//读完 97
        //读: 将写进的8位存放在 32位中,放入低8位,剩下24位全补0所以会为正
        int read4= fis.read();
        System.out.println(read4);//255
        int read5= fis.read();
        System.out.println(read5);//0
        // 读完返回-1
        int read6= fis.read();
        System.out.println(read6);//-1
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值