Java I/O系统

概述

Java I/O系统_第1张图片

  • 输入流读取数据,输出流写入数据
  • 基本输入输出流为InputStream和OutputStream,他们的子类产生的目的时为了向不同的介质中读写数据。如FileInputStream和FileOutputStream是向文件中写入数据,ByteArrayInputStream和ByteArrayOutputStream是向字节数组中写入数据
  • 过滤器有两个版本,过滤器流及阅读器和书写器。
  • 过滤器流可以串联到输入流或者输出流上,用于加密、修改转换数据等作用
  • 阅读器和书写器可以串联到输入流和输出流上面,允许程序读写文本(字符)而不是字节
  • 字符流本质其实就是基于字节流读取时,去查了指定的码表

Java I/O系统_第2张图片

基础读写

package javaio;
import java.io.*;
public class CreateNewFile {
    public static void main(String[] args) {
        String dirPath = "F:" + File.separator + "hello";
        String filePath = dirPath + File.separator + "test.txt"; //文件夹不创建,无法创建文件
 //创建文件夹
        File dir = new File(dirPath);
        if (dir.exists())
            System.out.println("已存在该文件夹,删除中:"+dir.delete());
        else System.out.println("正在创建该文件夹:"+dir.mkdir());
 //创建文件
        File file = new File(filePath);
        try {
            System.out.println(File.separator); //系统目录中的间隔符
        System.out.println(File.pathSeparator);//路径分隔符
        if (file.exists())
            System.out.println("已存在该文件,删除中:"+file.delete());
        else System.out.println("此文件不存在!");
        System.out.println("正在创建该文件:"+file.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
 }
        //写入文件
 try {
        OutputStream out = new FileOutputStream(filePath);
        String str = "AB";
        out.write(str.getBytes());
        OutputStream append = new FileOutputStream(filePath,true);//可以追加append
        append.write("你好".getBytes());
        out.close();
        append.close();
        System.out.println("文件的长度:"+file.length());//可以用来创建读取时的数组大小,节省空间
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        System.out.println("文件未找到!");
        } catch (IOException e) {
            e.printStackTrace();
 }
        //读取文件
    try {
            InputStream in = new FileInputStream(filePath);
        try {
                //怎么读取单个然后转成字符
        byte[] b=new byte[1024];
        int len = in.read(b);
        System.out.println("读取的文件长度:"+len);
        System.out.println(new String(b,0,len));
        System.out.println(in.read()); //读到末尾会返回-1,可以利用这个特性设计循环逐个读
        in.close();
        } catch (IOException e) {
                e.printStackTrace();
        }
    } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件未找到!");
 }
    }
}

目录列表器

package javaio;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;
public class DirList {
    public static void main(String[] args) {
        File path = new File(".");
        String[] list;
        if (args.length == 0) {
            list=path.list();   //无参数获取File对象包含的全部列表
        }else
            list= path.list(new DirFilter(args[0]));    //带有一个参数过滤器,将符合条件的过滤出来
        Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
        for (String dirItem : list) {
            System.out.println(dirItem);
        }
    }
}
class DirFilter implements FilenameFilter {
    private Pattern pattern;
    public DirFilter(String regex) {
        this.pattern = Pattern.compile(regex);
    }
    @Override
    public boolean accept(File dir, String name) {
        return pattern.matcher(name).matches();
    }
}
  • File类表示特定文件或者一组文件的文件路径

你可能感兴趣的