首页 > 编程语言 >javase-day06

javase-day06

时间:2024-08-13 18:52:43浏览次数:16  
标签:File day06 System file println new javase String

aFile_FileDemo01

package com.se.aFile;

/**
 * 绝对路径与相对路径的说明:
 * 1.当前工作空间是 /home/user/michael/
 *
 * 需求1: 访问 /home/user/michael/file1.txt
 * 相对路径: file1.txt
 * 绝对路径: /home/user/michael/file1.txt
 *
 * 需求2: 访问 /home/user/michael/doc/file1.txt
 * 相对路径: doc/file1.txt
 * 绝对路径: /home/user/michael/doc/file1.txt
 *
 * 需求3: 访问 /home/user/lucy/file1.txt
 * 相对路径: ../lucy/file1.txt
 * 绝对路径: /home/user/lucy/file1.txt
 *
 * 需求4: 访问 /home/user/lucy/doc/file1.txt
 * 相对路径: ../lucy/doc/file1.txt
 * 绝对路径: /home/user/lucy/doc/file1.txt
 */

public class FileDemo01 {
}

aFile_FileDemo02

package com.se.aFile;

import java.io.File;

/**
 * File的常用构造器
 *  1. 如果我们想在程序中来描述或者操作磁盘上的一个文件或者文件夹,可以使用File类型
 *  2. File类型位于java.io包下
 *  3. File可以新建,删除,移动,修改,重命名文件或者文件夹,也可以对文件或者文件夹的属性
 *      进行访问。但是不能对文件的内容进行访问(读和写)。
 *  4. 常用构造器
 *      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");
        boolean result = file.exists();
        if (result) {
            System.out.println("D盘下dir1文件夹存在");
        } else {
            System.out.println("D盘下dir1文件夹不存在");
        }

        //调用构造器File(String parent,String child)
        File file1 = new File("D:/code", "a.txt");
        System.out.println(file1.exists()); //false

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

    }
}

aFile_FileDemo03

package com.se.aFile;

import java.io.File;

/**
 * 文件属性的相关方法
 */

public class FileDemo03 {
    public static void main(String[] args) {
        //使用一个File构造器来描述一个文件夹
        File file = new File("H:/c/ms.txt");
        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());

    }
}

aFile_FileDemo04

package com.se.aFile;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;

/**
 * 文件查询,检索的相关方法
 *   String[] list(): 返回指定文件夹里的子文件或者子目录的名字
 *   File[] listFiles(): 返回指定文件夹里的子文件或者子目录的File对象
 */

public class FileDemo04 {
    public static void main(String[] args) {
        //使用一个File构造器来描述一个文件夹
        File file = new File("H:/c");
        String[] list = file.list();
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("--------------------------------------");

        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1.getName() + "  " + file1.getAbsolutePath());
        }
        System.out.println("--------------------------------------");

        //使用lambda表达式
        FilenameFilter filter = (File dir, String name) -> !name.endsWith(".java");
        //重写accept方法:编写过滤逻辑,
        //name指的就是文件夹里的每一个文件或文件夹dir就是要操作的那个文件列表(文件夹)
        String[] list1 = file.list(filter);
        for (String s : list1) {
            System.out.println(s);
        }
        File[] files1 = file.listFiles(filter);
        System.out.println(Arrays.toString(files1));
    }
}

aFile_FileDemo05

package com.se.aFile;

import java.io.File;

/**
 * File的新建,删除
 */

public class FileDemo05 {
    public static void main(String[] args) {
        //使用File来描述磁盘上的一个文件夹
        File dir1 = new File("D:/dir1");
        if (!dir1.exists()) {
            //创建文件夹
            dir1.mkdir();
        }
        //此时,dir1一定存在 在dir1里创建一个file1.txt的文件
        File file1 = new File(dir1, "file1.txt");
        if (!file1.exists()) {
            try {
                file1.createNewFile();
            } catch (Exception e) {
                e.printStackTrace();
            }
            //此时,file1一定存在
        }
    }
}

aFile_FileDemo06

package com.se.aFile;

import java.io.File;

/**
 * 文件夹的多层级创建。
 *   1. mkdir()方法只能创建一级文件夹,
 *   2. mkdirs()方法可以创建多级文件夹。
 */

public class FileDemo06 {
    public static void main(String[] args) {
        File file = new File("H:/c/");
        if (!file.exists()) {
            file.mkdirs();
        }

        //重命名
        File file1 = new File("H:/dir11/dir22/dir33");
        if (file1.exists()) {
            file1.renameTo(new File("H:/dir11/dir22/dir33"));
        }

        //通过renameTo(File file)方法移动文件
        File file2 = new File("H:/dir11/dir22/dir33/a.txt");
        File file3 = new File("H:/dir11/dir22/a.txt");
        if (file2.exists()) {
            file2.renameTo(file3);
        }
    }
}

aFile_FileDemo07

package com.se.aFile;

import java.io.File;

/**
 * File的删除功能
 * 1. delete方法只能删除空文件夹
 * 2. delete如果想要删除非空文件夹,需要把里面删除干净才能删除
 */

public class FileDemo07 {
    public static void main(String[] args) {
        File file = new File("H:/dir11/dir22/dir33");
        if (file.exists()) {
            boolean f = file.delete();
            System.out.println(f);
        }

        //测试
        File f = new File("H:/dir11");
        delete(f);
    }

    // 递归方法删除指定的文件夹
    public static void delete(File file) {
        if (!file.exists()) {
            throw new RuntimeException("要删除的文件或者文件夹不存在");
        }
        if (file.isDirectory()) {
            //获取文件夹里的内容 文件或文件夹
            File[] files = file.listFiles();
            //遍历每一个文件夹或者文件
            for (File f : files) {
                delete(f);
            }
        }
        //if执行完,如果是文件夹,内容请看,并删除空文件夹
        //如果不是文件夹,文件之间删除
        file.delete();
    }
}

bFile_FileInputStream02

package com.se.bFileStream;

import java.io.FileInputStream;
import java.io.IOException;

/**
 *  FileInputStream:
 *    1. 是InputStream抽象类的子类型
 *    2. 是一个低级流,用于连接文件和程序
 *    3. 常用构造器
 *       FileInputStream(String pathname)
 *       FileInputStream(File file)
 */

public class FileInputStream02 {
    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);
            for (int i = 0; i < 10; i++){
                //交互次数多
                ch = fis.read();
                System.out.println((char)ch);
            }
            //提前创建一个10个长度的byte数组
            byte[] bs = new byte[10];
            //将数据读入数组中
            int length = -1;
            while((length=fis.read(bs)) != -1){//大大减少了和磁盘的交互次数
                String str = new String(bs, 0, length);
                System.out.println(new String(str));

            }

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

bFile_FilePutOutStream01

package com.se.bFileStream;
import java.io.FileOutputStream;

/**
 * 文件输出流:
 *  1. 是OutPutStream的子类型
 *  2. 是低级流(节点流),用于连接文件和程序
 *  3. 常用的构造器
 *     FileOutputStream(File file):将原有的内容覆盖
 *     FileOutputStream(String pathname): 将原有的内容覆盖
 *     FileOutputStream(File file, boolean append): 有追加效果
 *     FileOutputStream(String pathname, boolean append): 有追加效果
 *  4. 输出流不会帮助我们创建不存在的文件夹,但是文件不存在会帮我们创建出来
 *
 */

public class FileOutPutStream01 {
    public static void main(String[] args) {
        //向D:的file1.txt里写东西
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("D:/file1.txt");
            //追加模式的构造器
//            fos = new FileOutputStream("D:/file1.txt", true);
            //写一个A
            fos.write(65);
            //将B~Z写入文件
            for (int i = 66; i <= 90; i++) {
                //注意,没写一次都会与磁盘交互一次,次数越多,性能越差
                fos.write(i);
            }

            //将"hello world"写入文件中
            byte[] bytes = "hello world".getBytes("utf-8");
//            fos.write(bytes);
            fos.write(bytes, 0, 7);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

cBuffered_BufferedInPutStream01

package com.se.cBuffered;

import java.io.BufferedInputStream;
import java.io.FileInputStream;

/**
 * 字节缓冲输出流:
 *   1. 是一个高级流,内部维护着一个缓冲区,默认缓冲区大小为8KB
 *   2. 在读取文件中的数据时,一次性尽可能读取到缓冲区大小的字节
 *   3. read方法从缓冲区中读取数据,当缓冲区中的数据被读取完时,再从磁盘中读取数据,存入缓冲区
 *   4. 常用构造器:
 *       BufferedInputStream(InputStream is)
 *       BufferedInputStream(InputStream is, int size)
 */

public class BufferedInPutStream01 {
    public static void main(String[] args) {
        BufferedInputStream bis = null;
        try {
            bis = new BufferedInputStream(
                        new FileInputStream("D:/file1.txt"), 10);
            //读取一个字节
            int ch = bis.read();
            System.out.println((char) ch);
            //读取多个字节
            byte[] bs = new byte[10];
            int len = -1;
            //读到文件末尾,返回-1
            while ((len = bis.read(bs)) != -1) {
               String str = new String(bs, 0, len);
               System.out.println(str);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                bis.close();
            } catch (Exception ex) {
                throw new RuntimeException(ex);
            }
        }
    }
}

cBuffered_BufferedOutPutStream01

package com.se.cBuffered;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 字节缓冲输出流: BufferedOutputStream
 *  1. 内部维护了一个字节数组作为缓冲区(缓存): 默认值是8KB
 *  2. 我们写入数据的时候,先写到缓冲区,当缓冲区满了再一次性写入磁盘
 *      从而减少了与磁盘的交互次数,提高了写出效率。
 *  3. 最后一次写入到缓存之后,有可能没有装满,可以调用flush方法,将其强制写入磁盘
 *  4. 构造器:
 *       BufferedOutputStream(OutputStream os)
 *       BufferedOutputStream(OutputStream os, int size): size用于自定义缓冲区的大小
 */

public class BufferedOutPutStream01 {
    public static void main(String[] args) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("D:/file2.txt", true);
            bos = new BufferedOutputStream(fos);

            //将A写入缓冲区
            bos.write('A');
            //将"hello world"写入缓冲区
            byte[] bytes = "hello world".getBytes("utf-8");
//            bos.write(bytes);
            bos.write(bytes,0,bytes.length);
            bos.flush(); //即使没有关闭流,也会强制冲刷缓冲区

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                //多个流的关闭顺序,应先关闭高级流,在关闭低级流
                //不过可以直接关闭高级流
                bos.close(); //高级
                fos.close(); //低级
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

dData_DataInPutStreamDemo01

package com.se.dData;


import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class DataInPutStreamDemo01 {
    public static void main(String[] args) {
        try (DataInputStream dis = new DataInputStream(
                new FileInputStream("D:/file3.txt"))) {
            int nums = dis.readInt();
            double v = dis.readDouble();
            boolean b = dis.readBoolean();
            String s = dis.readUTF();
            System.out.println(nums);
            System.out.println(v);
            System.out.println(b);
            System.out.println(s);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

dData_DataOutPutStreamDemo01

package com.se.dData;

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 数据输入输出流,是字节过滤流的子类型,其拓展了一些功能,
 *  可以直接书写基本数据类型和字符串类型
 */

public class DataOutPutStreamDemo01 {
    public static void main(String[] args) {
        //将流的创建写到try模块的小括号中,自动关闭
        try (DataOutputStream dos =
                     new DataOutputStream(
                             new FileOutputStream("D:/file.txt"))) {
            dos.writeInt(10);//四个字节
            dos.writeDouble(3.14);//八个字节
            dos.writeBoolean(true);//一个字节
            dos.writeUTF("你是最棒的");//字符串 十五个字节 每写一次UTF的字符串会使用两个字符记录长度
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

标签:File,day06,System,file,println,new,javase,String
From: https://blog.csdn.net/m0_64370841/article/details/141171200

相关文章

  • 24-08-08 JavaSE Map集合
    24-08-08javaSEMap集合Map接口的特点Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value(双列元素)Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中3.Map中的key不允许重复,原因和HashSet一样,前面分析过源码.Map......
  • JavaSE基础(5)——抽象类与接口
    目录1、abstract关键字 2、抽象方法3、抽象类4、接口5、接口与抽象类的区别6、JDK8版本接口新特性7、类之间的关系8、UML类图1、abstract关键字 可以修饰类和方法,不可以修饰属性,对应的类和方法就称之为抽象类和抽象方法;2、抽象方法有抽象方法的类一定是抽象类......
  • JavaSE基础知识分享(五)
    写在前面前面讲的是面向对象中的继承思想,下面让我们来看看多态这部分的内容!Java面向对象概念概述多态概述:某一个事物在不同状态下的多种状态。实现多态的三大前提:要有继承关系。要有方法的重写。要有父类的引用指向子类对象。访问成员的特点:成员变量:编译时看左,运行......
  • javase-day01
    aException_Exception01packagecom.se.aException;/***异常,Exception,父类Throwable。与其平级的是Error(Error错误,程序员无法处理,属于JVM级别的错误)*1.程序员可以处理异常。如果不处理,即JVM帮忙处理,简单粗暴,就是终止程序的运行*2.所以,程序员应该处理......
  • JavaSE基础知识分享(四)
    写在前面前面讲的是面向对象中的封装思想,下面让我们来看看继承这部分的内容!继承概述多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。通过extends关键字可以实现类与类的继承:class子类名extends父类名......
  • 1.1javaSE初识
    JDK:JDK是JavaDevelopmentKit的缩写,意为Java语言的软件开发工具包(SDK)。它是Java编程的核心工具,为程序开发者提供了一个完整的开发环境。JRE:Java运行环境,是运行Java程序所必须的环境的集合,包含了JVM(Java虚拟机)和Java核心类库。Java开发工具:包括编译器(javac)、解释器(java)、调试......
  • JavaSE基础知识分享(三)相关练习题
    写在前面大家前面的面向对象部分学的怎么样了,快来看看这些题你能不能快速地写出答案,面向对象在Java中是非常重要的,快来检测你的薄弱点在哪,及时查漏补缺!使用面向对象思想编写下列题目:1.使用面向对象的思想,编写自定义描述狗的信息。设定属性包括:品种,年龄,心情,名字;方法包括:叫,跑。......
  • 代码随想录算法训练营day06|242.有效的字母异位词,349.两个数组的交集,202.快乐数,1.两数
    242.有效的字母异位词题目链接:https://leetcode.cn/problems/valid-anagram/description/我的代码:classSolution{public:boolisAnagram(strings,stringt){if(s.size()==t.size()){intrecord[26]={0};for(inti=0;i......
  • 24-08-04 JavaSE java集合详解
    24-08-04JavaSE集合详解文章目录24-08-04JavaSE集合详解理解集合java集合的体系框架Collection类Collection接口的常用方法集合的遍历iterator迭代器增强for循环List类List类的常用方法List的三种遍历方法List的排序ArrayList类ArrayList类的注意事项Arraylist的......
  • JavaSE-类和对象详解
    D图一张,本文较长,偏笔记向,建议收藏慢慢观看~1.面向对象的初步认知Java是一门纯面向对象的语言(简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物......