文件操作-IO

这篇博客详细介绍了Java中的文件操作,包括File类的使用,如获取文件信息、创建与删除文件,以及字节流和字符流的运用,用于读写文件内容。此外,还涵盖了文件复制、目录遍历和内容搜索等功能。通过示例代码展示了如何在Java中实现这些操作。
摘要由CSDN通过智能技术生成

目录

前言

文件

狭义上的文件

广义上的文件

File类

文件内容的读写

字节流(以字节为单位)适用于二进制文件

InputSream

OutputSream

字符流(以字符为基本单位)适用于文本文件

Reader

Writer

示例


前言

在上篇博客,我们学习了多线程,接下来就要学一些文件的操作!!! 

文件

狭义上的文件

存储在硬盘上的数据,以“文件”为单位,进行组织,常见的就是普通文件(文本文件、图片、视频、音频等)

硬盘的特点:

1、硬盘存储空间大,内存存储空间小;

2、硬盘访问速度慢,内存访问速度快;

3、硬盘的成本比较低,内存成本比较高;

4、硬盘上的数据断电不会丢失,内存数据断电会丢失

广义上的文件

操作系统,是要负责管理软硬件资源,操作系统往往会把这些资源都统一的抽象成“文件”来进行管理 

File类

IO输入输出

File(String pathname)根据文件路径创建一个新的File实例,路径可以是绝对路径或者相对路径

修饰符及返回值类型方法签名说明
String
getParent()
返回 File 对象的父目录文件路径
String
getName()
返回 FIle 对象的纯文件名称
String
getPath()
返回 File 对象的文件路径
String
getAbsolutePath()
返回 File 对象的绝对路径
String
getCanonicalPath()
返回 File 对象的修饰过的绝对路径
boolean
exists()
判断 File 对象描述的文件是否真实存在
boolean
isDirectory()
判断 File 对象代表的文件是否是一个目录
boolean
isFile()
判断 File 对象代表的文件是否是一个普通文件
boolean
createNewFile()
根据 File 对象,自动创建一个空文件。成功创建后返 回 true
boolean
delete()
根据 File 对象,删除该文件。成功删除后返回 true
void
deleteOnExit()
根据 File 对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行
String[ ]
list()
返回 File 对象代表的目录下的所有文件名
File[ ]
listFiles()
返回 File 对象代表的目录下的所有文件,以 File 对象表示
boolean
mkdir()
创建 File 对象代表的目录
boolean
mkdirs()
创建 File 对象代表的目录,如果必要,会创建中间目录
boolean
renameTo(File dest)
进行文件改名,也可以视为我们平时的剪切、粘贴操作
booleancanRead()
判断用户是否对文件有可读权限
booleancanWrite()
判断用户是否对文件有可写权限
    public static void main(String[] args) throws IOException {
        File f=new File("D:/do.txt");
        System.out.println(f.getParent());
        System.out.println(f.getName());
        System.out.println(f.getPath());
        System.out.println(f.getAbsolutePath());
        System.out.println(f.getCanonicalPath());
    }

普通文件的创建删除

    public static void main(String[] args) throws IOException {
        File f=new File("./test.txt");
        //判定存在
        System.out.println(f.exists());
        //判定是否是目录
        System.out.println(f.isDirectory());
        //判定文件是否存在
        System.out.println(f.isFile());
        //创建文件
        System.out.println(f.createNewFile());
        System.out.println(f.exists());
    }
    public static void main(String[] args) {
        //删除文件
        File f=new File("./test.txt");
        System.out.println(f.delete());
        //进程退出时删除文件
        f.deleteOnExit();
    }

创建目录

    public static void main(String[] args) {
        //创建目录
        File f=new File("./testDir");
        f.mkdir();
        //创建多级目录
        f.mkdirs();
    }

重命名

    public static void main(String[] args) {
        //重命名
        File srcFile=new File("aaa.txt");
        File destFile=new File("bbb.txt");
        srcFile.renameTo(destFile);
    }

文件内容的读写

字节流(以字节为单位)适用于二进制文件

InputSream

    public static void main(String[] args) throws IOException {
        InputStream inputStream=new FileInputStream("./bbb.txt");
        while (true){
            int b=inputStream.read();
            if (b==-1){
                break;
            }
            System.out.println(b);
        }
        inputStream.close();
    }

OutputSream

    public static void main(String[] args) throws IOException {
        OutputStream outputStream=new FileOutputStream("./bbb.txt");
        outputStream.write(97);
        outputStream.write(98);
        outputStream.write(99);
        outputStream.close();
    }

使用OutputStream写文件的时候,只要打开文件成功,就会把文件原有内容清空

字符流(以字符为基本单位)适用于文本文件

Reader

    public static void main(String[] args) throws IOException {
        Reader reader=new FileReader("./bbb.txt");
        while (true){
            int ret=reader.read();
            if (ret==-1){
                break;
            }
            char ch=(char) ret;
            System.out.println(ch);
        }
        reader.close();
    }

Writer

    public static void main(String[] args) throws IOException {
        Writer writer=new FileWriter("./bbb.txt");
        writer.write(97);
        writer.close();
    }

使用Scanner来读取文本文件内容

    public static void main(String[] args) throws IOException {
        InputStream inputStream=new FileInputStream("./bbb.txt");
        Scanner scanner=new Scanner(inputStream);
        while (scanner.hasNext()){
            System.out.println(scanner.next());
        }
        inputStream.close();
    }

使用PrintWriter来写文本文件内容

    public static void main(String[] args) throws IOException {
        OutputStream outputStream=null;
        try {
            outputStream=new FileOutputStream("./bbb.txt");
            PrintWriter writer=new PrintWriter(outputStream);
            writer.println();
            writer.printf("a=%d\n",10);   
        }finally {
            outputStream.close();   
        }
    }

示例

 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件

1、先让用户输入:要扫描的路径+要查找的词

2、遍历目录,找到名字匹配的文件

3、询问用户是否删除

    public static void main(String[] args) throws IOException {
        //1.让用户输入了必要的信息
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要扫描的路径:");
        File rootDir=new File(scanner.next());
        if (!rootDir.isDirectory()){
            System.out.println("您输入的目录不存在!");
            return;
        }
        System.out.println("请输入要搜索的关键词:");
        String toDelete=scanner.next();

        //2.遍历目录
        scanDir(rootDir,toDelete);


    }

    private static void scanDir(File rootDir,String toDelete) throws IOException {
        System.out.println("当前访问"+rootDir.getCanonicalPath());
        File[] files=rootDir.listFiles();
        if(files==null){
            //说明rootDir是一个空的目录
            return;
        }
        //如果目录非空,循环遍历每个元素
        for (File f:files){
            if (f.isDirectory()){
                scanDir(f,toDelete);
            }else {
                //不是目录,是普通文件,判定文件名是否符合要求,是否要进行删除
                checkDelete(f,toDelete);
            }
        }
    }

    private static void checkDelete(File f, String toDelete) throws IOException {
        if (f.getName().contains(toDelete)){
            System.out.println("该单词"+toDelete+"被"+f.getCanonicalPath()+"包含了,是否删除?(Y/N)");
            Scanner scanner=new Scanner(System.in);
            String choice=scanner.next();
            if (choice.equals("Y")||choice.equals("y")){
                f.delete();
            }
        }
    }

文件的复制

    public static void main(String[] args) {
        //输入源文件和目标文件
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入源文件:");
        File srcFile=new File(scanner.next());
        System.out.println("请输入目标文件:");
        File destFile=new File(scanner.next());
        if (!srcFile.isFile()){
            System.out.println("输入的源文件有误!");
            return;
        }
        if (!destFile.getParentFile().isDirectory()){
            System.out.println("输入的目标文件有误!");
            return;
        }

        //打开源文件,按照字节读取内容,依次写入到目标文件中
        try (InputStream inputStream=new FileInputStream(srcFile);
             OutputStream outputStream=new FileOutputStream(destFile)){
            //读src的每个字节,写到dest中
            while (true){
                int ret=inputStream.read();
                if (ret==-1){
                    break;
                }
                outputStream.write(ret);
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }

扫描指定目录,并找到名称中或者内容包含指定字符的所有普通文件(不包含目录)

    public static void main(String[] args) throws IOException {
        //1.输入路径和要查找的关键词
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要扫描的路径:");
        File rootDir=new File(scanner.next());
        if (!rootDir.isDirectory()){
            System.out.println("您输入的目录不存在!");
            return;
        }
        System.out.println("请输入要搜索的关键词:");
        String toFind=scanner.next();
        scanDir(rootDir,toFind);
    }

    private static void scanDir(File rootDir, String toFind) throws IOException {
        File[] files=rootDir.listFiles();
        if(files==null){
            //说明rootDir是一个空的目录
            return;
        }
        //如果目录非空,循环遍历每个元素
        for (File f:files){
            if (f.isDirectory()){
                scanDir(f,toFind);
            }else {
                //不是目录,是普通文件,判定文件名是否符合要求,是否要进行删除
                checkDelete(f,toFind);
            }
        }
    }

    private static void checkDelete(File f, String toFind) throws IOException {
        //1.先检查文件名
        if (f.getName().contains(toFind)){
            System.out.println(f.getCanonicalPath()+"文件中包含了"+toFind);
            Scanner scanner=new Scanner(System.in);
            String choice=scanner.next();
            if (choice.equals("Y")||choice.equals("y")){
                f.delete();
            }
        }
        //2.在检查文件内容
        try (InputStream inputStream=new FileInputStream(f)){
            StringBuilder stringBuilder=new StringBuilder();
            Scanner scanner=new Scanner(inputStream);
            while (scanner.hasNextLine()){
                stringBuilder.append(scanner.nextLine()+"\n");
            }
            if (stringBuilder.indexOf(toFind)>-1){
                System.out.println(f.getCanonicalPath()+"文件内容包含"+toFind);
            }
        }
    }
数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值