Java编程思想 Java的IO

Java的IO

一.File类:

1.File类的作用:

代表一个特定文件的名称。

代表一个目录下的一组文件的名称。此时可以使用list()方法,返回一个字符数组。

2.目录查看器:

如果想查看一个目录列表,可以使用两种方法来使用File对象。

一,调用不带参数的list()方法,便可以获得此File对象包含的全部列表。

二,如果想得到一个受限列表,就要用到“目录过滤器”。显示符合条件的File对象。

FilenameFilter接口中的accept()方法是关键,对文件进行筛选。

public interface FilenameFilter {
    boolean accept(File dir, String name);
    //接受文件所在目录的File对象,以及包含文件名的String
}

DirFilter类为帮助list()调用accept()方法而服务,accept()会使用正则表达式的matcher对象,来看正则表达式是否匹配这个名字。

class DirFilter implements FilenameFilter{
    private Pattern pattern;
    public DirFilter(String regex) {
        pattern = Pattern.compile(regex);//正则表达式
    }
    public boolean accept(File dir, String name){
        return pattern.matcher(name).matches();
    }
}

公共类中list()方法的用法:list()方法会为此目录对象下的每一个文件调用accept(),来判断文件的名字,最后会返回一个数组。

File path = new File(".");
if(args.length == 0)
    list = path.list();
else 
    list = path.list(new DirFilter(args[0]));
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
//严格按照字母表排序

如果用更简洁的方式将两个类合在一起表示:用一个作为list参数的匿名内部类。

list = path.list(new FilenameFilter(){
    private Pattern pattern = Pattern.compile(args[0]);
    public boolean accept(File Dir, String name){
        return pattern.matcher(name).matches();
    }
});
3.目录的检查和创建
File f;
f.isFile();//判断是否为文件
f.isDirectory();//是否为路径
old.renameTo(rname);//将一个文件重命名或移动到由参数指示的完全不同路径
f.mkdirs();//创建此抽象路径指定的目录,包括不存在的父目录
f.mkdir();//只能创建一级,并且需要父目录
f.getAbsolutePath();//完整的目录
f.getPath();//最后一级目录
f.canRead();f.canWrite();
f.getName();//获取文件名

二. 输入和输出

InputStreamOutputStream是面向字节的。

ReaderWriter是面向字符的,兼容了Unicode。

1.缓冲输入文件:
try{
    String filename;
    BufferedReader in = new BufferedReader(new FileReader(filename));
    String s;
    while((s = in.readLine()) != null){}
}catch(IOException e){
    e.printStackTrace();
}
2.控制台输入:
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));//省略异常处理
3.一次一个字节读取文件:
DataInputStream in = new DataInputSream(new BufferedInputStream(new FileInputStream("testEOF.java")));
4.自我独立的类 RandomAccessFile

是一种特殊的文件流,可以用它在文件的任何地方查找或者插入数据。

同时实现了DataInputDataOutput接口,所以可以用来读写文件。

构造器及方法:

RandomAccessFile(File f, String mode);
RandomAccessFile(String f, String mode);//mode为r或rw
readInt() readLine() writeChar() writeDouble()
void seek(long pos)//将指针调到所需位置
int skipBytes(int n)//将指针向下移动若干字节
long getFilePointer()//返回指针当前位置

猜你喜欢

转载自blog.csdn.net/ljfyyj/article/details/80976961