枚举类型
- 定义:通过enum关键字定义枚举类型,各个常量使用逗号 , 来分割。
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。 - 枚举的成员,字段都作为当前 枚举类型的实例存在,默认被 public static final 修饰;
- 定义的枚举类型会隐式的继承 java.lang.Enum;这是java枚举类型的基类;
- 枚举类型中默认构造器私有
- 常用的枚举类型方法
//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;
}
}