2021-07-16

本文介绍了Java中的枚举类型,包括如何定义枚举、枚举成员的特性以及常用方法如name()、ordinal()和values()。同时,详细讲解了File类的使用,展示了一个获取并显示文件属性信息的示例。此外,通过两个实际的代码示例,演示了如何使用IO流进行文件复制,分别使用了字节流和字符流实现。
摘要由CSDN通过智能技术生成

枚举类型

  1. 定义:通过enum关键字定义枚举类型,各个常量使用逗号 , 来分割。
    Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
  2. 枚举的成员,字段都作为当前 枚举类型的实例存在,默认被 public static final 修饰;
  3. 定义的枚举类型会隐式的继承 java.lang.Enum;这是java枚举类型的基类;
  4. 枚举类型中默认构造器私有
  5. 常用的枚举类型方法
//name()返回对应枚举实例的字段名
        System.out.println(weekday.name());
        
        //ordinal() 返回此枚举常量的序数(它在枚举声明中的位置,其中初始常量的序数为零)。 
        System.out.println(weekday.ordinal());
        
        //values()返回所属枚举类型的所有实例存放到枚举数组中
        Weekday[] arr=weekday.values();

        System.out.println(Arrays.toString(arr));
        System.out.println(weekday.ordinal());
        //jdk5之后支持枚举类型
        switch (weekday){
            case ONE:
                System.out.println("周一");
                break;
            case TWO:
                System.out.println("周二");
                break;
            case SEVEN:
                System.out.println("周日");
                break;
        }
**File类(通过查询API学习使用方式)**
引用链接:http://c.biancheng.net/view/1133.html#:~:text=%E5%9C%A8%20Java%20%E4%B8%AD%EF%BC%8C%20File%20%E7%B1%BB%E6%98%AF%20java.io%20%E5%8C%85%E4%B8%AD%E5%94%AF%E4%B8%80%E4%BB%A3%E8%A1%A8%E7%A3%81%E7%9B%98%E6%96%87%E4%BB%B6%E6%9C%AC%E8%BA%AB%E7%9A%84%E5%AF%B9%E8%B1%A1,%EF%BC%8C%E4%B9%9F%E5%B0%B1%E6%98%AF%E8%AF%B4%EF%BC%8C%E5%A6%82%E6%9E%9C%E5%B8%8C%E6%9C%9B%E5%9C%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%93%8D%E4%BD%9C%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95%EF%BC%8C%E5%88%99%E9%83%BD%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20File%20%E7%B1%BB%E6%9D%A5%E5%AE%8C%E6%88%90%E3%80%82%20File%20%E7%B1%BB%E5%AE%9A%E4%B9%89%E4%BA%86%E4%B8%80%E4%BA%9B%E6%96%B9%E6%B3%95%E6%9D%A5%E6%93%8D%E4%BD%9C%E6%96%87%E4%BB%B6%EF%BC%8C%E5%A6%82%E6%96%B0%E5%BB%BA%E3%80%81%E5%88%A0%E9%99%A4%E3%80%81%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95%E7%AD%89%E3%80%82%20File%20%E7%B1%BB%E4%B8%8D%E8%83%BD%E8%AE%BF%E9%97%AE%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E6%9C%AC%E8%BA%AB%EF%BC%8C%E5%A6%82%E6%9E%9C%E9%9C%80%E8%A6%81%E8%AE%BF%E9%97%AE%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E6%9C%AC%E8%BA%AB%EF%BC%8C%E5%88%99%E9%9C%80%E8%A6%81%E4%BD%BF%E7%94%A8%E8%BE%93%E5%85%A5%2F%E8%BE%93%E5%87%BA%E6%B5%81%E3%80%82


假设有一个文件位于 C:\windows\notepad.exe。编写 Java 程序获取并显示该文件的长度、是否可写、最后修改日期以及文件路径等属性信息。实现代码如下:

public class Test02 {
    public static void main(String[] args) {
        String path = "C:/windows/"; // 指定文件所在的目录
        File f = new File(path, "notepad.exe"); // 建立File变量,并设定由f变量引用
        System.out.println("C:\\windows\\notepad.exe文件信息如下:");
        System.out.println("============================================");
        System.out.println("文件长度:" + f.length() + "字节");
        System.out.println("文件或者目录:" + (f.isFile() ? "是文件" : "不是文件"));
        System.out.println("文件或者目录:" + (f.isDirectory() ? "是目录" : "不是目录"));
        System.out.println("是否可读:" + (f.canRead() ? "可读取" : "不可读取"));
        System.out.println("是否可写:" + (f.canWrite() ? "可写入" : "不可写入"));
        System.out.println("是否隐藏:" + (f.isHidden() ? "是隐藏文件" : "不是隐藏文件"));
        System.out.println("最后修改日期:" + new Date(f.lastModified()));
        System.out.println("文件名称:" + f.getName());
        System.out.println("文件路径:" + f.getPath());
        System.out.println("绝对路径:" + f.getAbsolutePath());
    }
}

在上述代码中 File 类构造方法的第一个参数指定文件所在位置,这里使用C:/作为文件的实际路径;第二个参数指定文件名称。创建的 File 类对象为 f,然后通过 f 调用方法获取相应的属性,最终运行效果如下所示。
C:\windows\notepad.exe文件信息如下:

文件长度:193536字节
文件或者目录:是文件
文件或者目录:不是目录
是否可读:可读取
是否可写:可写入
是否隐藏:不是隐藏文件
最后修改日期:Mon Dec 28 02:55:19 CST 2016
文件名称:notepad.exe
文件路径:C:\windows\notepad.exe
绝对路径:C:\windows\notepad.exe

IO流
流: 是一组有序的数据序列,将数据从一个地方带到另一个地方。(类似于管道,数据以先入先出的方式进行流动)数据源–数据–>目的地
作用: 读写文件内部的内容,上传,下载
流的分类:(分类之间是相辅相成的)
按照流向分:
输入流
输出流
(以大脑为中心,以程序为中心,明确数据源和目的地,能够确定输入还是输出)
按照操作单元分;
字节流 : 万能流,任意内容都能转为字节
字符流 : 只能传输纯文本的内容
按照功能分:
节点流 : 真实做读入写出的流
功能流 : 增强节点流的功能,加强性能

字节流:
字节输入流 InputStream
文件字节输入流 FileInputStream
分类 节点流 流向分:输入流 操作单元:字节流
功能: 读入read() 关闭close()
字节输出流 OutputStream
分类:节点流 流向分:输出流 操作单元:字节流
功能:写入write() 刷新:flush() 关闭:close()
OutputStream 此抽象类是表示输出字节流的所有类的超类。
FileOutputStream : 文件输出流,将数据写出到指定文件中
注意:
如果目的地文件不存在,系统会自动创建
输出流如果目的地文件存在,内容默认覆盖,设置追加

学习练习,将D:\File\music.png 复制到 D:\File\wuhu.png

package class001.Class20210716;

import java.io.*;

public class Class_IOPractice1 {
    public static void main(String[] args) {
        Copy xy=new Copy("D://File//music.png","D://File//wuhu.png");
        xy.copy();
    }

}
class Copy{
    private String FileINLocation;
    private String FileOULocation;
    public void copy(){
        //创建输入输出流
        InputStream in=null;
        OutputStream ou=null;
        try {
            in=new FileInputStream(getFileLocation());
            ou=new FileOutputStream(getFileOULocation());
            //准备字节数组
            byte[] arr=new byte[1024];
            //读入-->写出
            int x=-1;
            while ((x=in.read(arr))!=-1){
                ou.write(arr,0,x);
            }
            //刷出
            ou.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭
            if(in!=null){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(ou!=null){
                try {
                    ou.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    //构造器
    public Copy() {}

    public Copy(String fileLocation) {
        FileINLocation = fileLocation;
    }
    public Copy(String fileLocation,String fileOULocation) {
        FileINLocation = fileLocation;
        FileOULocation = fileOULocation;
    }
    //公有的设置器和访问器
    public String getFileLocation() {
        return FileINLocation;
    }
    public void setFileLocation(String fileLocation) {
        FileINLocation = fileLocation;
    }

    public String getFileOULocation() {
        return FileOULocation;
    }

    public void setFileOULocation(String fileOULocation) {
        FileOULocation = fileOULocation;
    }
}
字符输入流  : 只能读写纯文本数据
    输入流 : Reader 字符输入流的父类
        FileReader 文件字符输入流
            read()
            read(char[])
            close()
    输出流 : Writer
    	FileWriter 文件字符输出流
    		writer()
    		writer(char[])
    		flush()
    		close()

学习练习:将D:\File\test.txt 复制到 D:\File\haha.txt

package class001.Class20210716;

import java.io.*;

public class Class_IOPractice2 {
    public static void main(String[] args) {
        Copy1 copy1=new Copy1("D://File//test.txt","D://File//haha.txt");
        copy1.copy();
    }
}
class Copy1{
    private String fileReader;
    private String fileWriter;
    public void copy(){
        //创建输入,输出流
        Writer rt=null;
        Reader rd=null;
        try {
            rt=new FileWriter(getFileWriter());
            rd=new FileReader(getFileReader());
            //准备字节数组
            char[] arr=new char[1024];
            //读入与写出
            int len=-1;
            while ((len=rd.read(arr))!=-1){
                rt.write(arr,0,len);
            }
            //刷新
            rt.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(rt!=null){
                try {
                    rt.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(rd!=null){
                try {
                    rd.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    //构造器
    public Copy1() { }
    public Copy1(String fileReader, String fileWriter) {
        this.fileReader = fileReader;
        this.fileWriter = fileWriter;
    }

    //公有设置器和访问器
    public String getFileReader() {
        return fileReader;
    }

    public void setFileReader(String fileReader) {
        this.fileReader = fileReader;
    }

    public String getFileWriter() {
        return fileWriter;
    }

    public void setFileWriter(String fileWriter) {
        this.fileWriter = fileWriter;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值