一、enum---枚举----JDK1.5
对能够列举的数据进行封装----------枚举类型
枚举本质上也是class。
定义枚举:
enum week{
........
}
enum定义的枚举实际上直接继承了Emum <E extends Enum<E>>。
在枚举类型中,构造方法默认是private(私有的)。
public class Demo1 {public static void main(String[] args) {System.out.println(color.READ.getName());}
}
//关于主题颜色的枚举类型
enum color{READ("红色","夕阳红"),GREEN("绿色","草绿色"),BLUE("蓝色","天空色");private String dis;private String name;private color(String name,String dis){
this.name=name;this.dis=dis;}public String getDis() {return dis;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public void setDis(String dis) {this.dis = dis;}
}
二、File
1.定义
File表示文件或文件夹
2.构造
File(String pathName)
File(URI uri) //URI 统一资源标识 URL 统一资源定位
3.常用方法
常用方法 | 意义 |
---|---|
创建 | |
createNewFile() | 创建新文件---当文件不存在的时候才会创建 |
mkdir() | 创建日录 ---每次只能创建一层日录 |
mkdirs() | 创建多层日录 |
删除 | |
delete() | 删除文件或者日录---如果删除的是日录且该日录下有子文件或子日录则删除失败 |
判断 | |
canWrite() | 判断此文件是否可写 |
isDirrctory() | 判断是否是一个目录 |
isFile() | 判断是否是一个文件 |
exists() | -判断此文件或者目录是否真实存在的 |
isAbsolute() | 判断file所表示的文件的路径是否是一个绝对路径 |
isHidden() | 判浙file是否是一个隐藏文件 |
获取 | |
listFiles() | 获取指定目录下子文件和子目录组成的数组 |
getName() | 获取文件名 |
getAbsoluteFile() | 获取file所在绝对路径 |
练习:利用File的api实现统计某个目录(包括子目录)中的所有png图片的数量。请选择要统计的文件:
1:统计html文件 2:统计css文件 3:统计js文件 4:统计图片文件 png,jpeg,jpg,gif
import java.io.File;
import java.util.Scanner;
public class Exercise {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String path="D:\\nextbook\\java\\assets\\assets";while (true) {System.out.println("请选择您要统计的文件");System.out.println("1.html文件");System.out.println("2.png文件");System.out.println("3.jpg文件");;System.out.println("4.jepg文件");System.out.println("5.css文件");System.out.println("99.退出");
int id = scanner.nextInt();switch (id) {case 1:System.out.println("html文件个数为:"+bianli(path, "html"));break;case 2:System.out.println("png文件个数为:"+bianli(path, "png"));break;case 3:System.out.println("jpg文件个数为:"+bianli(path, "jpg"));break;case 4:System.out.println("jpeg文件个数为:"+bianli(path, "jpeg"));break;case 5:System.out.println("css文件个数为:"+bianli(path, "css"));break;case 99:return;default:System.out.println("输入选择有误,请重新选择");}}
}public static int bianli(String path,String str) {// 获取文件对象File f = new File(path);// 把里面的文件装进数组File[] files = f.listFiles();int num = 0;for (File file : files) {if (file.isDirectory()) {// 如果是文件夹就打开用这个方法,并累加子文件夹中的图片数量num += bianli(file.getAbsolutePath(),str);} else if (file.isFile()) {String name = file.getName();if ( name.endsWith(str)) {System.out.println(name);num++;}}}
return num;}
}
4、文件处理中的路径问题
分隔符: window: 路径分隔符使用"",程序中"D:\test\logo.png" Linux/Mac: 路径分隔符使用"/" 路径: 相对路径: 相对于当前文件的位置 . 表示当前目录 .. 表示上一层目录
绝对路径: window -- 盘符+路径 D:\workspace\index.html Linux/Mac -- /+路径 /workspace/index.html java程序中的路径分隔符:根据不同系统平台自适应 File.separator System.getProperty("file.separator"
三、RandomAccessFile
在操作文件的时候会把文件看做一个大型的字节数组。 每一个RandomAccessFile对象创建好之后默认都是从第0个字节开始操作。
RandomAccessFile:
1.可以自由访问文件的任意位置。 2.允许自由定位文件记录指针。
3.只能读写文件而不是流。 RandomAccessFile类中包含一个游标(文件指针:隐含数组的索引),用以标识当前读写处的位置(文件指针开始位于文件头(也就是0处),当读/写了n个字节后,文件记录指针将会向后移动n个字节。),RandomAccessFile可以自由移动该游标。
RandomAccessFile包含了如下两个方法来操作文件记录指针。
记录指针的方法 | |
---|---|
long getFilePointer() | 返回文件记录指针的当前位置 |
void seek(long pos) | 将文件记录指针定位到pos位置。(调用本地方法seek0) |
RandomAccessFile类有两个构造器:
构造器方法 | |
---|---|
RandomAccessFile(String name, String mode) | |
RandomAccessFile(File file, String mode) |
创建一个随机访问文件的流:
(1)构造器1中name会转换为构造器2中的file,RandomAccessFile(String name, String mode)等价于RandomAccessFile(new File(name), String mode)
(2)mode – 访问模式 ➢ "r":以只读方式打开指定文件。如果试图对该RandomAccessFile执行写入方法,都将抛出IOException异常。 ➢ "rw":以读、写方式打开指定文件。如果该文件尚不存在,则尝试创建该文件。 ➢ "rws":以读、写方式打开指定文件。相对于"rw"模式,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。 ➢ "rwd":以读、写方式打开指定文件。相对于"rw"模式,还要求对文件内容的每个更新都同步写入到底层存储设备。
"rws"和"rwd"模式的工作方式与FileChannel类的force(boolean)方法非常相似,传递true和false两种参数来实现,但它们始终适用于每个 I/O 操作,因此通常更有效。
“rwd”模式可用于减少执行的 I/O 操作的数量。 使用“rwd”只需要更新要写入存储的文件内容; 使用“rws”需要更新文件内容及其要写入的元数据,这通常至少需要再进行一次低级 I/O 操作。
RandomAccessFile类的read()方法和write()方法和流的操作执行上没有太大区别
常用方法
常用方法 | 描述 |
---|---|
skipBytes(int n) | 该方法用于尝试跳过输入的n个字节以丢弃跳过的字节(跳过的字节不读取):int skipBytes(int n) 该方法可能跳过一些较少数量的字节(可能包括0),这可能由任意数量的条件引起,在跳过n个字节之前已经到大文件的末尾只是其中的一种可能 该方法不抛出EOFException,返回跳过的实际字节数,如果n为负数,则不跳过任何字节** |
getFD() | 可以返回这个文件的文件描述符 |
length() | 可以返回文件的长度 |
setLength(long newLength) | 还可以设置文件的长度 |
close() | RandomAccessFile在对文件访问操作全部结束后,要调用close()方法来释放与其关联的所有系统资源 |