黑马程序员--java基础:File类和文件字节IO流

本文详细介绍了Java中的File类,包括字段、构造方法、获取文件属性、创建与删除文件、重命名文件、列举文件以及应用案例。此外,还讲解了字节流的使用,如FileOutputStream的文件写入和FileInputStream的文件读取,以及如何进行文件复制。同时,文章提到了字节流与字符流之间的转换,帮助理解IO流在处理数据时的角色。

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、File类
1,字段和构造方法

public static void constructorDemo() {
        //可以封装已存在的,也可以封装不存在的文件或者目录
        File f1 = new File("f:\\a.txt");
        //用两个字符串初始化文件对象
        File f2 = new File("f:\\","a.txt");
        //用一个文件对象和一个字符串初始化文件对象
        File f = new File("f:\\");
        File f3 = new File(f,"a.txt");

        /*分割符可以用private static final String FILE_SEPARATOR = System.getProperty("file.separator")
        也可以用File.separator*/
        File f4 = new File("f:"+File.separator+"abc"+File.separator+"a.txt");
        System.out.println(f4);
    }

2.File类常见方法
2.1获取。
2.1.1 获取文件名称。String getName()
2.1.2 获取文件路径。
String getAbsolutePath()获取绝对路径字符串(唯一)
File getAbsoluteFile()获取绝对路径的文件(唯一)
String getPath()获取File对象中封装的路径
2.1.3 获取文件大小。
long getLength()
2.1.4 获取文件修改时间。
long time = file.getLastModified()获取file的最后修改时间
Date date = new Date(time);创建日期对象
String str_time = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(date);将日期装成字符串
2.1.5获取空余空间
long getFreeSpace()获取文件空余空间

2.2创建与删除。
boolean creatNewFile()文件存在不创建,不存在就创建。可能抛异常,并停掉程序
boolean mkdir()创建单级目录
boolean mkdirs()创建多级目录
boolean delete()删除文件不走回收站,不能删除有内容文件的文件夹

2.3判断。
boolean exists()判断是否存在,才能判断是文件还是文件夹
boolean isFile()是不是文件
boolean isDirectory()是不是文件夹
boolean isHidden()判断文件是否隐藏

3.重命名
boolean renameTo(File dest)重新命名此抽象路径名表示的文件。

    public static void renameToDemo() {

        File f1 = new File("c:\\9.mp3");
        File f2 = new File("d:\\aa.mp3");
        //将c盘f1中的9.mp3文件重命名为aa.mp3,并剪切到d盘
        boolean b = f1.renameTo(f2);
        System.out.println("b="+b);
    }

4.列举
4.1列举文件名称
String [] list()只列举文件中的文件夹名称或文件名(包括隐藏的)
注意:当文件夹不存在(封装的文件夹不存在,封装的是文件),返回的数组为空,应判断;如果文件夹存在但无内存,
结果是长度为0的字符串数组

File file = new File("c:\\");
        String [] names = file.list();
        //判断数组是否为空
        if (names != null) {
            for (String name : names) {
                System.out.println(name);
            }
        }

4.2列举文件对象
File [] listFiles()列出的文件对象,就可以获取名称,路径,大小等等

File file = new File("c:\\");
File [] ffs = file.listFiles();
        if(ffs != null) {
            for(File ff : ffs) {
                System.out.println(ff.getName()+"..."+ff.getFreeSpace());
            }
        }

4.3过滤器(文件名过滤器和文件过滤器)

public class Demo{
    public static void main(String [] args) {
    File file = new File("c:\\");
        //过滤出以".txt"结尾的文件名
        String [] names = file.list(new SuffixFilter(".txt"));
        //判断数组是否为空
        if (names != null) {
            for (String name : names) {
                System.out.println(name);
            }
        }
    }
}
//创建一个文件名过滤器
class SuffixFilter implements FilenameFilter {
    private String suffix;
    //构造函数
    public SuffixFilter (String suffix) {
        super();
        this.suffix = suffix;
    }
    public boolean accept(File dir, String name){
        return name.endsWith(suffix);
    }
}
//创建一个文件过滤器
class FilterByFile implements FileFilter {
    public boolean accept(File pathname) {
        //
        return pathname.isFile();
    }
}

4.4列出有效盘的根
static File[] listRoots()列出可用的文件系统根

5.应用
需求1:变量指定目录中的所有文件夹和文件名称(包含子目录)

import java.io.*;  

class FileDemo3 {  
    public static void main(String[] args)  
    {  
        File dir = new File("e:\\java练习");  
        showDir(dir);  
    }  

    public static String getLevel(int level)  
    {  
        StringBuilder sb = new StringBuilder();  
        sb.append("|--")  
        for(int x=0;x<level;x++)  
        {  
            sb.insert(0,"  ")  
         }  
         return sb.toString();  
    }  

    public static void showDir(File dir,int level)  
    {  
        System.out.println(getLevel(level)+dir.getName());  
        level++;  
        File[] files = dir listFiles();  
        for(int x=0;x<files.length;x++)  
        {  
            if(files[x].isDirectory())  
                showDir[Files[x,level]]  
            else  
                System.out.println(getLevel(level)files[x])  
        }  
    }  
}  

需求2:删除指定目录中的所有文件和文件夹

import java.io.*;  

class RemoveDir {  
    public static void main(String[] args)  
    {  
        File dir = new File("E:\\TEST")  
        removerDir(dir);  
    }  

    public static void removeDir(File dir)  
    {  
        File[] files = dir.listFiles();  
        for(int x=0;x<files.length;x++)  
        {  
            if(files[x].isDirectory())  
                removeDir(files[x]);  
            eles  
                //files[x].delete();  
                System.out.println(files[x].toString()+"::"+files[x].delete());  
        }  
        System.out.println(dir+":dir:"+dir.delete());  
    }  
}  

二、IO流
IO:用于处理设备上数据的技术,设备包括:内存,硬盘光盘等等;
流:系统资源,windows系统本身就可以操作设备,各种语言只是使用系统平台上的这个资源,并对外提供了各种语言自己的操作功能,这些功能最终调用的是系统资源。使用完资源一定要释放资源。
流的分类:按操作数据分为字节流和字符流;按流向分为输入流(读)和输出流(写)
1.字节输入输出流
1.1将数据写入文件中使用FileOutputStream
思路:
1)创建输出流对象,并明确数据存储的目的地,如果目的地不存在,就创建;如果存在就覆盖
2)调用输出流的写功能,
3)关闭资源

public class IOExceptionDemo {

    public static void main(String[] args) {

        File file = new File("templefile");
        if(!file.exists()) {
            file.mkdir();
        }
        //使得fos变量在下面try,catch,finally块中都有效
        FileOutputStream  fos = null;
        try {
            //创建输出流
            fos = new FileOutputStream("templefile\\fos.txt");
            fos.write("abcde".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                //如果创建输出流对象失败,又调用close()就会出现空指针异常
                if(fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                //资源关闭失败转换后抛出运行异常
                throw new RuntimeException("程序已失败"+e);
            }
        }
    }

}

补充:
1)如果想要在前一个文件中续写字符串需要修改输出流对象初始化
fos = new FileOutputStream(“templefile\fos.txt”,true);
2)如果要换行续写,需要修改输出流对象初始化,和写出语句
private static final String LINE_SEPARAOR = System.getProperty(“line.separator”);

fos = new FileOutputStream(“templefile\fos.txt”,true);
String str = LINE_SEPARATOR+”hello”;
fos.write(str.getBytes());

1.2 将已有文件的数据读取出来
思路:
1)创建文件输入流对象,并关联数据资源
2)调用read(byte [])方法循环读取数据
3)关闭资源

public static void main(String[] args) {
        File file = new File("templefile");
        if(!file.exists()) {
            throw new RuntimeException("要读的文件不存在");
        }
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            //创建字节数组,
            byte [] buf = new byte [1024];
            int len = 0;
            //将读取的字节存入字节数组中,返回存入的字节总数,循环读取
            while((len = fis.read(buf)) != -1) {
                //将字节数组转成字符串打印
                System.out.println(len+"..."+new String(buf,0,len));
            }
        } catch (Exception e) {
            //将异常写入到日志文件中,进行记录
        }finally {
            try {
                if(fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                //一般抛出运行异常,或者写的日志文件中
                throw new RuntimeException("程序已停止"+e);
            }
        }
    }

1.3复制文件
思路:
1)创建输入流对象,并和源数据关联
2)创建输出流对象,并通过输出流创建一个目的
3)调用read(byte [])方法存储到字节数组中,然后调用write()方法写出,循环读写
4)关闭资源

public static void main(String[] args) {

        File file = new File("templefile");
        if(!file.exists()) {
            throw new RuntimeException("要读的文件不存在");
        }
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(file);
            fos = new FileOutputStream("f:\\abc");
            //定义一个字节缓冲区
            byte [] buf = new byte [1024];
            int len = 0;
            //循环读写
            while((len = fis.read(buf)) != -1) {
                fos.write(buf, 0, len);
            }
        } catch (IOException e) {
            // 将异常写入日志中
        } finally {
            if(fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    throw new RuntimeException("程序已停止"+e);
                }
            }
            if(fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    throw new RuntimeException("程序已停止"+e);
                }
            }
        }
    }

2字节流与字符流的桥梁
2.1字节流到字符流
需求1:字节流转换成字符流,读中文非常方法便
思路:
1).创建字节输入流,明确关联的源数据
2)利用字节流创建字符流,
3)一个字符一个字符地读取
4)关闭字符流

public static void main(String[] args) {

        File file = new File("templefile\\fos.txt");
        if(!file.exists()) {
            throw new RuntimeException("要读的文件不存在");
        }
        FileInputStream fis = null;
        InputStreamReader isr = null;
        try {
            fis = new FileInputStream(file);
            isr = new InputStreamReader(fis);
            int len = 0;
            //循环地一个字符一个字符地读取
            while((len = isr.read()) != -1) {
                System.out.println((char)len);
            }
        } catch (IOException e) {
            //异常写入日志
        }finally{
            if(isr != null) {
                try {
                    isr.close();
                } catch (IOException e) {
                    throw new RuntimeException("程序已停止"+e);
                }
            }
        }
    }

需求2:字符流向字节流转换
思路:
1)创建字节输出流 ,明确目的地
2)使用字节流创建字符流
3)调用字符流的方法输出,用flush()刷新,可以继续使用流;用close()刷新后,关闭流

public static void main(String[] args) {

        File file = new File("templefile\\fos.txt");
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                throw new RuntimeException("路径有误"+e);
            }
        }
        FileOutputStream fos = null;
        OutputStreamWriter osw = null;
        try {
            fos = new FileOutputStream(file,true);
            osw =new OutputStreamWriter(fos);
            //直接写中文字符串,查表并把数据存储到缓冲区中,所有要刷新
            osw.write("你好啊!");
            osw.flush();
            osw.write("我hen好!");
            osw.flush();
        } catch (IOException e) {
            // 异常写入日志
        } finally {
            if(osw != null) {
                try {
                    osw.close();
                } catch (IOException e) {
                    throw new RuntimeException("程序已停止"+e);
                }
            }
        }

    }

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

代码下载链接: https://pan.quark.cn/s/a4b39357ea24 iSecure Center综合安防管理平台配置手册V2.0最新完整版。综合安防管理平台是一个集成了多种功能的智能化系统,通过接入视频监控、停车场、门禁以及报警检测等设备,达成安防信息化集成与联动。以电子地图作为核心载体,融合各安防设备,达成安防信息化集成与联动。 【海康威视iSecure Center综合安防管理平台配置手册 V2.0.0】是专门针对该公司的安防管理系统而编写的详细指南。iSecure Center是一个集成化、智能化的解决方案,其目标是通过整合视频监控、停车场管理、门禁控制报警系统等多个安全子系统,达成全面的安防信息化集成与联动。平台的核心作用是借助电子地图作为基础,整合各种安防功能,以提供高效且全面的安全监控管理。 手册中明确指出,iSecure Center的配置使用仅限于海康威视HIKVISION的用户,并且详细说明了版权法律声明,强调手册内容的所有权归属于杭州海康威视数字技术股份有限公司,未经授权,禁止进行任何形式的复制、翻译或修改。同时,手册也声明了产品仅适用于中国大陆地区,并且在法律允许的范围内,产品按照现有状态提供,不提供任何形式的保证,对于因使用产品或手册所导致的损失,公司不承担任何赔偿责任。 手册还特别警示用户,将产品接入互联网可能面临风险,如网络攻击、黑客入侵或病毒感染,用户需自行承担这些风险。同时,用户必须遵守适用的法律法规,不得将产品用于侵犯第三方权利或不当用途,否则公司将不承担任何责任。 在操作前,手册提供了符号约定,包括说明、注意危险等级的标识,帮助用户理解文档中关键信息的重要性。例如,“注意”用于提醒用户重要操作或...
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 gddrxy综合性实验——某系统的设计与实现---互联网应用开发(JSP)4 1. 在MySQL数据库中构建用于实验的数据表,要求包含至少三个字段,并在其中至少加入一条数据记录 2. 设计一个数据录入界面,将用户提交的信息发送至Servlet以执行合法性验证,若验证通过则调用DAO组件向数据表中追加一条新记录 实验报告 实验名称:综合性实验——某系统的设计与实现(互联网应用开发——JSP) 一、实验目的与要求 本次实验旨在使学生深入掌握并熟练运用JavaServer Pages (JSP) 技术开展互联网应用开发工作,特别是在数据库交互方面的实践。通过本次实践操作,期望达成以下学习目标: 1. 精通JSP在数据库层面的增删改查(Create, Read, Update, Delete)操作,包括建立数据库连接、执行SQL指令以及管理结果集等环节。 2. 掌握Servlet的生命周期机制,理解其在Web系统中的功能定位与工作程。 3. 学会构建动态网页,实现用户输入信息的采集,并在服务器端完成数据校验与处理程。 二、实验原理与内容 1. JSP进行数据库操作的典型程涵盖数据库连接建立、SQL指令执行、结果集处理以及连接关闭等多个关键步骤。 2. Servlet作为Java Web应用程序的核心构成部分之一,具有初始化、服务、销毁这三个生命周期阶段。在本次实验中,Servlet将负责接收并处理来自JSP页面的请求,完成数据合法性校验工作。 三、实验步骤与结果 1. 数据库准备: - 采用MySQL数据库创建一个实验用的数据表,例如命名"Student",表中包含"ID"(作...
内容概要:本文详细介绍了基于风光储能需求响应的微电网日前经济调度模型的Python代码实现,重点探讨了在风能、光伏等可再生能源出力具有不确定性的背景下,如何结合储能系统的运行特性与用户侧的需求响应机制,实现微电网系统的日前优化调度。该模型通过构建精确的数学模型并结合高效的优化算法,对分布式电源、储能设备及可控负荷进行协调优化,旨在最小化系统运行成本、提升可再生能源的消纳水平,并确保供电的安全性与稳定性。文中提供的完整Python代码实现了从数据输入、模型构建到求解分析的全程,便于读者复现、验证与二次开发。; 适合人群:具备一定电力系统基础知识Python编程能力,从事新能源、微电网、智能电网等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高校或科研机构开展微电网优化调度相关课题的教学与科研工作;②为实际微电网项目的日前调度策略设计提供技术支撑与仿真验证工具;③帮助研究人员深入掌握基于Python平台的能源系统建模与优化求解方法。; 阅读建议:建议读者结合文档中的理论推导与代码实现同步学习,重点关注目标函数设计、约束条件建模及优化求解器调用等关键环节,并尝试调整参数设置或拓展模型结构以适配不同应用场景。
内容概要:本文围绕电力系统短期负荷预测问题,深入研究了基于极限学习机(ELM)及其智能优化算法改进模型的预测方法,重点实现了ELM、白鲸优化算法(BWO)优化ELM以及鹭鹰优化算法(IBO)优化ELM三种预测模型,并通过Matlab平台进行仿真与性能对比。研究旨在提升负荷预测的精度与鲁棒性,解决传统ELM因输入权重偏置随机初始化导致的性能不稳定问题。通过引入两种新兴的元启发式优化算法对ELM的关键参数进行全局寻优,有效提升了模型的泛化能力与收敛稳定性。文章系统地完成了模型构建、参数优化、实验设计与结果分析,验证了优化后模型在短期负荷预测中的优越性,为电力系统调度决策提供了高精度的数据支撑技术路径。; 适合人群:具备一定电力系统基础知识、时间序列预测背景及Matlab编程能力的科研人员、电气工程专业高校研究生,以及从事智能电网、能源管理与负荷预测相关工作的工程技术人员。; 使用场景及目标:①应用于电力系统短期负荷预测,提升电网运行调度的精确性与经济性;②为智能优化算法与浅层神经网络融合研究提供可复现的技术方案与实验基准;③作为科研项目、学位论文或工程实践中负荷预测模块的核心算法参考。; 阅读建议:建议读者结合所提供的Matlab代码,深入理解ELM网络结构原理及白鲸、鹭鹰优化算法的实现机制,重点关注参数寻优过程与预测误差指标(如MAE、RMSE、MAPE)的对比分析,建议进一步尝试在不同数据集上验证模型泛化能力,并探索将其拓展至中长期负荷预测或其他时序预测领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值