文章目录
一.文件处理
1.创建File类的对象
File类创建功能
方法名:
1.public boolean creatNewFile()(当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件)
2.public boolean mkdir()(创建由此抽象路径名命名的文件夹)
3.public boolean mkdirs()(创建由此抽象路径命名的文件夹,若成功返回true,否则返回false
案例1(创建文件和文件夹)
package text;
import java.io.File;
import java.io.IOException;
public class FileDemo1 {
public static void main(String[] args)throws IOException {
File f1=new File("D:\\cwy\\java.txt");
System.out.println(f1.createNewFile());
System.out.println("-----------");
File f2=new File("D:\\cwy\\JavaSE");
System.out.println(f2.mkdir());
System.out.println("-----------");
File f3=new File("D:\\cwy\\JavaWEB\\HTML");
System.out.println(f3.mkdirs());
System.out.println("-----------");
File f4=new File("D:\\cwy\\javase.txt");
System.out.println(f4.createNewFile());
//System.out.println(f4.mkdir());
}
}
运行结果:若文件不存在,就创建文件并返回true;若文件已存在,就不创建文件,返回false
2.获取文件或文件夹属性
案例2(获取文件或文件夹的常用方法)
package text;
import java.io.File;
public class FileDemo2 {
public static void main(String[] args) {
File f=new File("D:\\itcast\\java.txt");
System.out.println(f.isDirectory());
System.out.println(f.isFile());
System.out.println(f.exists());
System.out.println(f.getName());
System.out.println(f.getAbsoluteFile());
System.out.println(f.getPath());
File f2=new File("D:\\itcast");
String[] strArray = f2.list();
for(String str:strArray){
System.out.println(str);
}
System.out.println("---------");
File[] fileArray = f2.listFiles();
for(File file:fileArray){
// System.out.println(file);
//System.out.println(file.getName());
//判断是否是文件,只得到文件的名称(不会输出目录的名称)
if(file.isFile()){
System.out.println(file.getName());
}
}
}
}
3.文件或文件夹操作
常用方法:
1.public boolean renameTo(File newFile)(将文件重命名为newFile对应的文件名)
2.public boolean delete()(将当前文件删除,若删除成功返回true,否则返回false)
4. 对文件的随机访问
1、对于 FileInputStream/FileOutputStream、FileReader/FileWriter 来说,它们的实例都是顺序访问流,即只能进行顺序读/写。而RandomAccessFile 类则允许文件内容同时完成读和写操作,它直接继承 object,并且同时实现了接口 DataInput 和 DataOutput。
2、RandomAccessFile 提供了支持随机文件操作的方法:
(1)readXXX()或者 writeXXX():如 ReadInt(),ReadLine(),WriteChar(),WriteDouble()等
(2)int skipBytes(int n):将指针向下移动若干字节
(3)length():返回文件长度
(4)long getFilePointer():返回指针当前位置
(5)void seek(long pos):将指针调用所需位置
在生成一个随机文件对象时,除了要指明文件对象和文件名之外,还需要指明访问文件的模式。
3.RandomAccessFile的构造方法:
RandomAccessFile(File file,String mode)
RandomAccessFile(String name,String mode)
4.mode 的取值:
(1) r:只读,任何写操作都讲抛出 IOException
(2)rw:读写,文件不存在时会创建该文件,文件存在是,原文件内容不变,通过写操作改变文件内容。
(3)rws:打开以便读取和写入,对于 “rw”,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
(4)rwd:打开以便读取和写入,对于 “rw”,还要求对文件内容的每个更新都同步写入到底层存储设备。
案例3(文件的随机访问)
package text;
import java.io.IOException;
import java.io.RandomAccessFile;
public class FileDemo {
public static void main(String[] args){
int data_arr[] = {12, 32, 43, 45, 1, 5};
try {
RandomAccessFile randf=new RandomAccessFile("temp.dat","rw");
for(int i = 0; i < data_arr.length; i++){
randf.writeInt(data_arr[i]);
}
for(int i = data_arr.length-1 ; i >= 0; i--){
randf.seek(i * 4L);
System.out.println(randf.readInt());
}
randf.close();
}catch(IOException e){
System.out.println("File access error" + e);
}
}
}
二.泛型
1.泛型的概念
1.泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。参数化类型就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
2. 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
2.泛型类及应用
- 泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。
2.泛型类的定义:[修饰符]class类名<>
案例1(最简单的泛型类应用)
//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
//在实例化泛型类时,必须指定T的具体类型
public class Text<T>{
//key这个成员变量的类型为T,T的类型由外部指定
private T key;
public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
this.key = key;
}
public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
return key;
}
}
注意:在实例化泛型类的过程中,实际类型必须是引用类型,不能用如int、double或char等这样的基本类型来替换参数类型来替换类型参数T
3.泛型方法
泛型方法的定义:定义泛型方法,只需将泛型的类型参数置于方法返回值类型前即可
案例2(泛型方法的使用)
public class Text {
private static int add(int a, int b) {
System.out.println(a + "+" + b + "=" + (a + b));
return a + b;
}
private static <T> T genericAdd(T a, T b) {
System.out.println(a + "+" + b + "="+a+b);
return a;
}
public static void main(String[] args) {
GenericMethod1.add(1, 2);
GenericMethod1.<String>genericAdd("a", "b");
}
}
三. 容器类
1.容器接口
1.1 Java容器框架
1.2 容器接口Collection
Collection接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理元素的方法
1.3列表接口List
列表接口List是Collection子接口,它是一种包含有序元素的线性表,其中的元素必须按顺序,且可重复,也可以是空值null。
实现List接口的类主要有两个:链表类LinkedLIst和数组列表类ArrayList,它们均是线性表
2. 集合接口Set
Set是一个不含重复元素的集合接口,它继承自Collection接口,并没有声明其他方法,它的方法都是从Collection接口那里继承过来的