IO流~~

File:

  1. public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File 实例。
  2. public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File 实例。
  3. public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File 实例

  1. public String getAbsolutePath():返回此 File 的绝对路径名字符串。
  2. public String getPath():将此 File 转换为路径名字符串。
  3. public String getName():返回由此 File 表示的文件或目录的名称。
  4. public long length():返回由此 File 表示的文件的长度。 (得到的字节的大小)
  5. String getParent():返回此 File 对象所对应的目录的父目录,以工作路径为准,如果已经在工作路径的根目录下,则返回 null,否则返回父目录。
  6. boolean renameTo(File newName):重命名此 File 对象所对应的文件或目录,成功返回 true,否则返回false。
  7. 注意:文件名字和文件路径的区别。

可见,重命名比得到名字麻烦。

  1. public boolean exists():此 File 表示的文件或目录是否实际存在。 (能创建文件对象,并不意味着,磁盘中里面有这个文件或者目录)
  2. public boolean isDirectory():此 File 表示的是否为目录。
  3. public boolean isFile():此 File 表示的是否为文件。
  4. boolean canWrite():判断 File 对象所对应的文件和目录是否可写。
  5. boolean canRead():判断 File 对象所对应的文件和目录是否可读。
  6. boolean isAbsolute():判断 File 对象所对应的文件或目录是否绝对路径。例如:如果在Unix/Linux 等系 统上,如果路径名的开头是/,则表明 File 对象对应一个绝对路径,在 Windows 等系统上,如果路径开头 是盘符,则说明它是一个绝对路径
  7. public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  8. public boolean delete() :删除由此 File 表示的文件或目录。(注意,这个删除,会把硬盘的文件删除)
  9. public boolean mkdir() :创建由此 File 表示的目录。
  10. public boolean mkdirs() :创建由此 File 表示的目录,包括任何必需但不存在的父目录。

 创建目录:(文件夹)

  •  单极目录:就在已经创建的目录的基础上只需要在创建一层的目录。
  • 多级目录:在已有的目录下面需要再创建多层目录的情况;(关键是看待创建目录的多少级的问题)

  • long lastModified():返回文件的最后修改时间。
  • long length():返回文件内容的长度。
  • public String[] list() :返回一个 String 数组,表示该 File 目录中的所有子文件或目录。
  • public File[] listFiles() :返回一个 File 数组,表示该 File 目录中的所有的子文件或目录。
  • 两者也可以包含FileFilter的文件过滤器,且只能返回当前目录的一级文件和文件夹。

FileFilter 类:(文件过滤器)

  • boolean accept(File pathname); //判断指定抽象路径名是否应该包含在某个路径名列表中 。

 小工具:重命名小工具:

 注意:原文件没有删除,是重命名了,因为创建文件对象,并不会在磁盘上创建文件,所以,原文件只是变了个名字。

修改指定的一个文件:

注意:①创建目标文件的时候,一定要在父类文件夹的里面建立

②最后的剪切不是删除,就是重命名。

修改多级文件:

package Java后端开发基础.文件;

import com.sun.javafx.iio.common.SmoothMinifier;

import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Scanner;

public class 集体重命名小工具 {
    private File file;//总文件夹
    private String filestart;
    private String fileend;
    private String dirstart;
    private String dirend;

    public 集体重命名小工具(File file, String filestart, String fileend, String dirstart, String dirend) {
        this.file = file;
        this.filestart = filestart;
        this.fileend = fileend;
        this.dirstart = dirstart;
        this.dirend = dirend;
        refile(file);
    }

    public void newstring(File file, String startelnment, String endelement){
        //重命名:三部曲
//                第一步:获得新名字
        StringBuilder oldname = new StringBuilder(file.getName());//运算速度远超string
        int start = oldname.indexOf(startelnment);
        int end = oldname.indexOf(endelement);
        String newname = oldname.delete(start, end+1).toString();
//                第二步,创立目标文件
        File file2 = new File(file,newname);//在父文件夹里面创建
//                第三步:重命名
        file.renameTo(file2);
    }
    public void refile(File file){//传入的文件一定是个文件夹
        File[] files = file.listFiles();
        for(File file1:files){
            if(file1.isFile()){//是个文件(出口)
               newstring(file1,filestart,fileend);//对文件重命名
            } else{//说明是个文件夹
              refile(file1);
            }
//            对文件夹重命名
            newstring(file,dirstart,dirend);
        }
        //对文件夹重命名;(包含总文件夹在内的所有的文件夹)
        newstring(file, dirstart, dirend);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请依次输入:总文件路径,要删除文件字符串的第一个字符及最后一个字符,要删除文件夹字符串的第一个和最后一个字符");
        System.out.println("注意:各个参数之间使用/隔开,没有可以写");
        String accept = scanner.next();
        System.out.println(accept);
        String[] strings = accept.split( "/");//以空格隔开
        System.out.println(Arrays.toString(strings));
        File file = new File(strings[0]);
        集体重命名小工具 test = new 集体重命名小工具(file, strings[1], strings[2], strings[3],strings[4]);
    }
}

 删除文件夹操作:

注意:先把文件夹里面的文件删除,删除后文件,再删除空文件夹(空文件夹才可以删除,像那种空文件夹套空文件夹似的总文件夹,也不能删除,这个文件夹里面什么都没有了才可以)

JDK8新特性:

 函数式编程:

 

修订后:

InputStream 字节输入流:(抽象类)

直接子类FileInputStream

  • int read():从输入流中读取单个字节,返回所读取的字节数据。
  • int read(byte[] b):从输入流中最多读取 b.length 个字节的数据,并将其存储在字节数组 b 中,返回实际 读取的字节数。
  • int read(byte[] b,int off,int len):从输入流中最多读取 len 个字节的数据,并将其存储在数组 b 中,放入 数组 b 中时,并不是从数组起点开始,而是从 off 位置开始,返回实际读取的字节数。

Reader 字符输入流(抽象类)

OutputStream 字节输出流:(抽象类)

直接子类FileOutputStream

  1. void write(int value):将指定的字节输出到输出流中。
  2. void write(byte[] buf):将字节数组中的数据输出到指定输出流中。
  3. void write(byte[] buf,int off,int len):将字节数组中从 off 位置开始,长度为 len 的字节输出到输出流中

 Writer 字符输出流

  1. void write(int c):将指定的字符输出到输出流中。
  2. void write(char[] buf):将字符数组中的数据输出到指定输出流中。
  3. void write(char[] buf,int off,int len):将字符数组中从 off 位置开始,长度为 len 的字符输出到输出流中。
  •  Writer 是一个字符输出流的抽象基类,并不能创建实例对象。Java 为该类提供了一个默认的实现类 FileWriter。

复制文件:

 装饰者模式:

 装饰类:

转换流 InputStreamReader和 OutputStreamWriter都是包装流,是reader和writer的直接子类,实现字节流到字符流的转化,他们的构造方法还支持指定字符集;

缓冲流:

 BufferedReader:(本质是个字符流)

  1. BufferedReader(Reader reader):创建一个使用默认大小输入缓冲区的缓冲字符输入流。
  2. BufferedReader(Reader reader,int size):创建一个使用指定大小输入缓冲区的缓冲字符输入流。

BufferedWriter:

  1. BufferedWriter(Writer writer):创建一个使用默认大小输入缓冲区的缓冲字符输出流。
  2. BufferedWriter(Writer writer,int size):创建一个使用指定大小输入缓冲区的缓冲字符输出流。

注:写入的数据并不会先输出到目的地,而是先存储至缓冲区中。 如果缓冲区中的数据满了,才会一次对目的地进行写出。如果要在缓冲区中数据未满的情况下将数据写入到目的地, 需要使用 flush()方法,将数据刷新一下。

实现多重文件夹的复制:(本质:递归思想)

package Java后端开发基础.文件;

import java.io.*;
public class test {
    public void copy(File src,File dest) throws IOException {
        //字节流复制,字节流对字节流文件对文件不会产生汉字的乱码
        InputStream inputStream = new FileInputStream(src);
        File file = new File(dest, src.getName());
        if(!file.exists()){//这个可以不写,对于文件,不写,会自动创建实体的文件
            file.createNewFile();
        }
        OutputStream outputStream = new FileOutputStream(file);
        byte[] bytes = new byte[10];
        int size = -1;
        while((size = inputStream.read(bytes))!=-1){
            outputStream.write(bytes,0,size);
        }
        outputStream.close();
        inputStream.close();//先进的后关
    }
    public void copyfile(File src,File dest) throws IOException {
        String newname = src.getName();//得到要复制文件夹的名字
        File newfile = new File(dest, newname);//创建目标文件夹对象
        if(!newfile.isDirectory()){//创建相应的文件夹
            newfile.mkdirs();//创建空的
        }
        File[] files = src.listFiles();
        for(File file:files){
            if(file.isFile()){
                //复制
                copy(file,newfile);
            }else{
                copyfile(file, newfile);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        test test = new test();
        File file = new File("src/数据结构");
        File file1 = new File("E:/");
        test.copyfile(file,file1);
    }
}

 相对路径:

  1. idea默认的相对路径是项目本身的位置;
  2. ./表示当前的路径,写不写无所谓,
  3. ../表示返回上级路径,

待续~~~~~~~~~~~~~~~~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值