Java IO

二、File

2.1

Java.io.file包下的
File:通过一个路径代表文件或者文件夹;
File类是文件和目录(directory)路径名的抽象表示形式:一个File类代表一个文件或者一个文件夹的路径
特殊之处:
这个路径不一定要真实存在
路径有:
1)绝对路径(带完整路径、盘符等信息);
2)相对路径(没有盘符,只有文件名等信息,相当于当前项目名下)

2.2 构造方法

File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File 实例。
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File 实例。
File(String parent, Stringchild) 从父路径名字符串和子路径名字符串创建新的 File 实例。
// 通过字符串代表文件/文件夹对象
        File file1 = new File("F:/a.txt");
        System.out.println(file1);

        // 通过父级路径 + 子级路径代表一个文件/文件夹对象
        File file12 = new File("F:\\A", "a.txt");
        // 以上这种,比较适合后续做文件上传使用

2.3 方法

创建功能
boolean createNewFile() 当且仅当不存在具有此抽象路径名指定名称的==文件==时,不可分地创建一个新的空文件。
boolean mkdir() ==创建==此抽象路径名指定的==目录/文件夹==。
boolean mkdirs() ==创建多层级的文件夹==。
// 通过字符串代表文件/文件夹对象
File file = new File("F:/a.txt");
// 创建不存在的新文件
boolean newfile = file.createNewFile();
System.out.println(newfile);

// 创建文件夹,不能使用已经存在的文件对象去调方法
File file1 = new File("F:/qf");
boolean mkdir = file1.mkdir();
System.out.println(mkdir);

// 创建多层文件夹
File file2 = new File("F:/qf/qf1");
boolean mldir1 = file2.mkdirs();
System.out.println(mldir1);

获取功能
File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。
String getAbsolutePath()返回此抽象路径名的绝对路径名字符串。
String getName()返回由此抽象路径名表示的文件或目录的名称。
String getPath()将此抽象路径名转换为一个路径名字符串。
String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。场景: 列出A文件夹下的所有记事本文件 (判断字符串后缀)
File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
long length() 返回由此抽象路径名表示的文件的长度。
File file = new File("F:/a.text");
        // 相对取当前项目根路径
        // File file = new File("a.text");
//         File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。
        System.out.println(file.getAbsoluteFile());

//         String getAbsolutePath()返回此抽象路径名的绝对路径名字符串。
        System.out.println(file.getAbsolutePath());

//         String getName()返回由此抽象路径名表示的文件或目录的名称。
        System.out.println(file.getName());

//         String getPath()获得构造方法中的路径
        System.out.println(file.getPath());

//         String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。场景: 列出A文件夹下的所有记事本文件 (判断字符串后缀)
        File file1 = new File("F:/A");
        String[] array = file1.list();
        System.out.println(Arrays.toString(array));

//         File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
        File[] listFiles = file1.listFiles();
        System.out.println(Arrays.toString(listFiles));

//         long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
        File file2 = new File("F:/a.txt");
        System.out.println(file2.lastModified());
        long l = file2.lastModified();
        // 有指定毫秒值创建Date对象
        Date lastDate = new Date(l);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        String format = sdf.format(lastDate);
        System.out.println(format);
        
//         long length() 返回由此抽象路径名表示的文件的长度。
        System.out.println(file2.length());// 字节

判断功能
boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
//        boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
        File file = new File("F:/b.txt");
        // 如果不存在,创建该文件
        if (!file.exists()) {
            file.createNewFile();
        }

//        boolean  isDirectory() 判断是否是文件夹。
        System.out.println(file.isDirectory());

//        boolean  isFile() 判断是否是件。
        System.out.println(file.isFile());

//        boolean  isHidden() 判断是否是隐藏文件。
        System.out.println(file.isHidden());

删除&重命名
boolean delete() 删除此抽象路径名表示的文件或目录。
boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。
//        boolean delete()  删除此抽象路径名表示的文件或目录。
        // 只能删除空文件夹
        File file = new File("F:/a.txt");
        System.out.println(file.delete());
        
//        boolean renameTo(File dest)  重新命名此抽象路径名表示的文件。
        File file1 = new File("F:/a.txt");
        file1.renameTo(new File("F:/B/a.txt"));

/** 改后路径与原来一直,就是单纯重命名
  *	改后路径与原来不一致,那就是移动并重命名
  */

设计方法,传入文件路径。列出文件夹下所有记事本文件

public static void findTxt(String path){
    // 设计方法,传入文件路径。列出文件夹下所有记事本文件
    File file = new File(path);
    if(!file.exists()) {
        System.out.println("该路径指定的文件不存在!");
        return;
    }
    if(!file.isDirectory()) {
        System.out.println("该路径指定的文件不是文件夹!");
        return;
    }
    String[] nameArr = file.list();
    for(String name : nameArr) {
        if(name.endsWith("txt")) {
            System.out.println("记事本文件: " + name);
        }
    }
}

三、IO流

流的概念“
在程序中,数据需要传输(移动),比如磁盘上的数据需要出现在显示器上,就需要进行数据传输。在Java中进行数据据传输的技术就是”流“
IO:Input(输入) && Output(输出)
IO分类
字节流
字节输入流
字节输出流
字符流
字符输入流
字符输出流
IO按方向分类
输入流
输出流

四、字节输入 & 输出流

字节输入流和字节输出流顶层设计是==抽象类==
InputStream 输入字节流
一般使用其子类 FileInputStream
OutputStream 输出字节流
一般使用其子类 FileOutputStream

4.1 FileInputStream

FileInputStream 用于读取诸如图像数据之类的原始字节流(二进制)
构造方法
FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

方法
int read() 一次读取一个字节
void close() 关流
FileInputStream fis = new FileInputStream("F:/qf\\a.txt");
System.out.println(fis);
FileInputStream fis = new FileInputStream("F:/qf\\a.txt");

        // 开始读取:read一次读取一个字节
//        int i1 = fis.read();
//        System.out.println((char) i1);
//
//        int i2 = fis.read();
//        System.out.println((char) i2);
//
//        int i3 = fis.read();
//        System.out.println((char) i3);
//
//        // 读到末尾返回 -1
//        int i4 = fis.read();
//        System.out.println((char) i4);

        int r = -1;
        while ((r = fis.read()) != -1){
            System.out.println((char) r);
        }

        // 光流,释放资源
        fis.close();
    }
read() 一次读一个,有点“慢”
read(byte[]) 一次读取一个数组 大小的数据,比较快
FileInputStream in = new FileInputStream("F:/qf\\a.txt");
byte[] bytes = new byte[4];
System.out.println(Arrays.toString(bytes));

// 可以将元素依次读取到数组中
in.read(bytes);
System.out.println(Arrays.toString(bytes));
in.close();

4.2 FileOutputStream

FileOutputStream 是文件输出流,用于将数据写入==File==
适合用于写入图像之类的二进制文件
构造方法
FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。
方法
void write(int b) 将指定字节写入此文件输出流。
void close() 关闭此文件输出流并释放与此流有关的所有系统资源。
FileOutputStream fos = new FileOutputStream("F:\\a.txt",true);
        /** 构造方法中参数2(Boolean append)意思是是否对该文件内容追加写入
          * true 追加内容到源文件
          * false 覆盖源文件内容(默认)
          *
          * 特殊的,写出的文件即使不存在,也会先创建文件再写入
          */
        // 写一个
//        fos.write(65);
        
        // 写多个
        byte[] bytes = {64,66,67,68};
        fos.write(bytes);

        fos.close();

        System.out.println("Over!");

4.3 使用捕获异常的方式编程

private static void testInCatch() {
    FileInputStream in = null;
    try {
        in = new FileInputStream("F:/a.txt");
        int r = -1;
        while ((r = in.read()) != -1){
            System.out.println(r);
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            in.close();
        } catch (IOException e){
            e.printStackTrace();
        }


    }
}
FileOutputStream fos = null;
try {
    fos = new FileOutputStream("F:\\a.txt",true);
    byte[] bytes = {64,65,66,67,6,69};
    fos.write(bytes);
} catch (IOException e){
    e.printStackTrace();
} finally {
    try {
        fos.close();
    } catch (IOException e){
        e.printStackTrace();
    }

}

4.4 拷贝图片

将一个图片从d盘复制到f盘

抛出
 // 将图片转为输入字节流
    FileInputStream fis = new FileInputStream("D:\\Pictures\\Saved Pictures\\1.jpg");

    // 将输出字节流转为图片
    FileOutputStream fos = new FileOutputStream("F:\\1.jpg");

    int r = -1;
    while ((r = fis.read()) != -1){
        fos.write(r);
    }
    fis.close();
    fos.close();
    System.out.println("Over!");
}
try catch

五、总结

file 关于文件操作

会创建文件对象,创建文件夹/文件,判断文件/文件夹

输入输出字节流:6行代码

会说:什么是IO,怎么分类,分别是和场景

单词:

pathname:路径名;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值