IO流

Stream

  • 字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
  • 字节流默认不使用缓冲区;字符流使用缓冲区。
  • 字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。

![iostream2xx](stream、file.assets/

.png)

BufferedReader

  • BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

  • int read( ) throws IOException

  • String readLine( ) throws IOException

  • void write(int byteval)

从控制台读取多字符输入

char c;
// 使用System.in创建BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入字符, 按下 'q' 键退出。");
// 读取字符
do {
    // 一个一个读
    c = (char) br.read();
    System.out.println(c);
} while (c != 'q');

从控制台读取字符串

// 使用System.in创建BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
System.out.println("Enter lines of text.");
System.out.println("Enter 'end' to quit.");
do {
    str = br.readLine();
    System.out.println(str);
} while (!str.equals("end"));

FileInputStream

// 读取文件的两种方式
InputStream f = new FileInputStream("C:\\Users\\Administrator\\Downloads\\myfile.txt");

File file = new File("C:\\Users\\Administrator\\Downloads\\myfile.txt");
InputStream in = new FileInputStream(file);

// 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常
public void close() throws IOException{}
// 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常
protected void finalize()throws IOException {}
// 这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1
public int read(int r)throws IOException{}
// 这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1
public int read(byte[] r) throws IOException{}
// 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值
public int available() throws IOException{}

FileOutputStream

// 写入
OutputStream f = new FileOutputStream("C:\\Users\\Administrator\\Downloads\\myfile.txt");

File file = new File("C:\\Users\\Administrator\\Downloads\\myfile.txt");
OutputStream fOut = new FileOutputStream(file);

// 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常
public void close() throws IOException{}
// 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常
protected void finalize()throws IOException {}
// 这个方法把指定的字节写到输出流中
public void write(int w)throws IOException{}
// 把指定数组中w.length长度的字节写到OutputStream中
public void write(byte[] w)

File类

// 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例
File(File parent, String child);
// 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例
File(String pathname)
// 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
File(String parent, String child)
// 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例
File(URI uri)

目录

创建

String dirname = "C:\\Users\\Administrator\\Downloads\\myDir\\childDir";
File d = new File(dirname);
// 创建一个文件夹和它的所有父文件夹
d.mkdirs();

dirname = "C:\\Users\\Administrator\\Downloads\\myDir\\childDir\\childDir2";
d = new File(dirname);
// 创建一个文件夹,成功则返回true,失败则返回false。
// 失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建
d.mkdir();

读取

String dirname = "F:\\一级目录";
File f1 = new File(dirname);
// 判断是否是目录
if (f1.isDirectory()) {
    System.out.println("目录 " + dirname);
    // 调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表
    String s[] = f1.list();
    for (int i = 0; i < s.length; i++) {
        File f = new File(dirname + "/" + s[i]);
        if (f.isDirectory()) {
            System.out.println(s[i] + " 是一个目录");
        } else {
            System.out.println(s[i] + " 是一个文件");
        }
    }
} else {
    System.out.println(dirname + " 不是一个目录");
}
/**
 * 目录 F:\一级目录
 * 一级目录下的文件.txt 是一个文件
 * 二级目录 是一个目录
 */

删除

public static void main(String[] args) throws IOException {

    File folder = new File("F:\\一级目录");
    deleteFolder(folder);
}

// 删除文件及目录
public static void deleteFolder(File folder) {
    File[] files = folder.listFiles();
    if (files != null) {
        for (File f : files) {
            if (f.isDirectory()) {
                // 递归删除
                deleteFolder(f);
            } else {
                f.delete();
            }
        }
    }
    folder.delete();
}
posted @ 2021-10-11 10:31  n1ce2cv  阅读(33)  评论(0编辑  收藏  举报