File类型&&IO流基础&&字节流&&转换流

File的解析

在程序中,我们使用java.io.File这个类来描述和操作磁盘上的一个文件或文件夹(目录)。File这个类,能新建、删除、移动,重命名文件或文件夹,也能获取或者修改文件或文件夹的信息(如大小,修改时间等),但File不能访问文件里的内容。如果需要访问文件里的内容,则需要使用输入/输出流。

路径

用来描述一个文件或者文件夹所存在的位置,可以分为 绝对路径 和 相对路径。

绝对路径

从磁盘的根目录开始,一层层的向内查找,直到找到这个文件。在不同的操作系统中,根目录的表示方式可能略有不同。例如,在UNIX和Linux系统中,根目录用斜杠(/)表示,如/home/user/file.txt;而在Windows系统中,根目录用驱动器名和冒号表示,如C:\Users\User\file.txt

相对路径

是相对于当前工作目录或另一个已知位置的路径。它描述的是文件或目录与当前位置之间的相对关系。相对路径通常省略了根目录部分,直接从当前目录开始描述路径。例如,假设当前工作目录是/home/user,要访问该目录下的文件file.txt,可以使用相对路径file.txt,而不需要写出完整的绝对路径。./ : 表示当前工作目录。 ./可以省略

 File的常用构造器

File(String pathname)
File(String parent,String child)
File(File parent,String child)

构造器只负责接收程序员传入的路径,并不会校验这个路径是否真实存在。

public class FileDemo02 {
    public static void main(String[] args) {
        //使用File类型来描述一个文件夹  D盘的下dir1文件夹。
//        File file = new File("D:/dir1");
            File file = new File("D:"+File.separator+"dir1");
            bollean result = file.exists();

            if (result){
            System.out.println("所描述的文件或者文件夹存在");
        }else{
            System.out.println("所描述的文件或者文件夹不存在");
        }
         /**
         * 调用构造器File(String parent,String child)
         */
          File file1 = new File("D:/code","BianLiang.java");

         System.out.println(file1.exists());
        /**
         * 调用构造器File(File parent,String child)
         */
          File parent = new File("D:/code");
          File file2 = new File(parent,"BianLiang.java");
            

          System.out.println(file2.exists());
    }
}














文件属性的相关方法

public class FileDemo03 {
    public static void main(String[] args) {
        //使用File构造器来描述一个真实存在的路径
        File file = new File("D:/code/BianLiang.java");
        System.out.println(file.getName());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getParent());
        System.out.println(file.getPath());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory);
        System.out.println(file.isHidden());
        System.out.println(file.canRead);
        System.out.println(file.canWrite());
        System.out.println(file.canExecute());
        System.out.println(file.lastModified());
        System.out.println(file.length());    
        

        File file = new File("D:/code");
        String[] lists = file.list();

        for(String list : lists){
        System.out.println(list);
}

        File[] files = file.listFiles();
        for(File file1 : files){
            System.out.println(file1.getName()+" "+file1.)
    }
        //匿名内部类定义一个过滤器对象

        FilenameFilter filter = new FilenameFilter(){
        //dir:要操作的那个文件夹 name:文件夹里的每一个文件或文件夹
        public boolean accept(File dir,String name){
            return !name.endsWith(".java");
}
};
        String[] list = file.list(filter);
        for(String list1:list){
            System.out.println(list1);
}
        File[] files1 = file.listFiles(filter);
        System.out.println(Arrays.toString(files1));
}}












        




















    

文件夹的多层级创建

mkdir()   创造一个空文件夹,不能多层级创建

mkdirs()  可以多层级创建

public class FileDemo06 {
    public static void main(String[] args) {
        File file = new File("D:/dir11/dir22/dir33");
        if(!file.exists()){
            file.mkdirs();
}
//重命名
    File file1 = new File("D:/dir11/dir22/dir33");
    if(file1.exists()){
        file1.renameTo(new File("D:/dir11/dir22/dir333"));
}
//renameTo(File file)移动文件夹
    File file2 = new File("D:/dir11/dir22/dir333/file1.txt");
    File file3 = new File("D:/dir11/dir22/file1.txt");
    if(file2.exists()){
        file2.renameTo(file3);
}
}
}
    

File的删除功能

1.delete方法只能删除文件或者空文件夹

2.delete方法如果想删除非空文件夹,需要把里面删除干净才能被删除。

public class FileDemo07 {
    public static void main(String[] args) {
//        File file = new File("D:/dir11/dir22/file1.txt");
//        if (file.exists()) {
//            boolean f = file.delete();
//            System.out.println("f:"+f);
//        }
        /* 测试: 删除 D:/dir11                */
        File f = new File("D:/dir11");
        delete(f);
    }

    /**
     * 使用递归算法,删除指定的文件夹。
     * @param file  可能是文件夹,也可能是文件。
     */
    public static void delete(File file){
        if(!file.exists()){
            throw new RuntimeException("要删除的文件或者文件夹不存在");
        }
        if (file.isDirectory()) {
            //获取文件夹里的内容,可能是文件夹,或者是文件
            File[] files = file.listFiles();
            //遍历每一个文件夹或者文件
            for (File f : files) {
                //f可能是文件夹,可能是文件,那就调用自己。
                delete(f);
            }
        }
        //if执行完,如果是文件夹,里面的内容清空了,然后自己就是空文件夹了,也能被删除了。
        //如果不是文件夹,是文件也能删除。
        file.delete();
    }
}

FileInputStream

FileInputStream1.是InputStream抽象类的子类型

2 是一个低级流,用于连接文件和程序。

3 常用构造器:FileInputStream(String pathname)   FileInputStream(File file)

public class FileInputStreamDemo01 {
    public static void main(String[] args) {
        FileInputStream fis = null;
        try{

            fis = new FileInputStream("D:/file1.txt");
            //读取一个字符
            int ch = fis.read();
            System.out.println((char) ch);
            //读取后续10个字符
            for(int i = 0;i<10 ;i++){
                ch = fis.read();//读取一次与磁盘交互一次,读取次数多,性能差
                System.out.println((char) ch);
            }
            //提前创建一个10长度的byte数组
            byte[] bs = new byte[10];
            
            while((length = fis.read(bs)) != -1){
                String str = new String()
            }

        }catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }catch (IOException e) {
            e.printStackTrace();
        }finally{
            try{
                fis.close();    
                
        }catch(IOException e){
            e.printStackTrace();
        }
        }
}
}

FileOutputStream

文件输出流1.是OutputStream的一个子类型

2.是一个低级流(节点流),用于连接文件和程序

3.常用构造器

FileOutputStream(File file)  会覆盖文件中原有的内容

FileOutputStream(String pathname)   会覆盖文件原有的内容

FileOutputStream(File file,boolean append)   有追加效果

FileOutputStream(String pathname,boolean append)   有追加效果

4.输出流,不会创建不存在的文件夹,但是如果文件不存在会创建出来

`write`方法可以写多个字节,但它不能写字符串。
 如果要写字符串,可以使用`getBytes`方法将字符串转换为字节数组,然后使用`write`方法写入。
public class FileOutputStreamDemo01 {
    public static void main(String[] args) {
        //向D:的file1.txt写东西
        FileOutputStream fos = null;
        try{
            fos = new FileOutputStream("D:/file1.txt",true);
            fos.write(65);
            for(int i = 'B';i<= 'Z';i++){
                fos.write(i);
        }

        byte[] byte = "hello world".getBytes("utf-8");
        fos.write(bytes,0,7);
        
        }catch (IOException e){
            e.printStackTrace();
        }finally{
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值