Java- IO流

138 阅读3分钟

「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

基本概念

流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

类图结构

IO流的分类

  • 从传输数据类型分为:字节流和字符流

  • 从传输方向分为:输入流和输出流

用法分析

(1) 按数据来源(去向)使用

是文件: FileInputStream, FileOutputStream, FileReader, FileWriter 是byte[]:ByteArrayInputStream, ByteArrayOutputStream 是Char[]: CharArrayReader, CharArrayWriter 是String: StringBufferInputStream, StringReader, StringWriter 网络数据流:InputStream, OutputStream, Reader, Writer

(2) 按是否格式化输出使用

要格式化输出:PrintStream, PrintWriter

(3) 按是否要缓冲使用

要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter。

(4) 按数据格式使用

二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream结束的子类 纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类

(5) 按输入输出使用

输入:Reader, InputStream类型的子类;输出:Writer, OutputStream类型的子类 

File类

File类里面的部分常量,方法

No.

方法或常量

类型

描述

1

public static final String pathSeparator

常量

表示路径的分隔符(windows是“;”)

2

public static final String separator

常量

表示路径的分隔符(windows是“\”)

3

public File(String pathname)

构造

创建File类对象,传入完整路径

4

public boolean createNewFile()throws IOException

普通

创建新文件

5

public boolean delete()

普通

删除文件

6

public boolean exists()

普通

判断文件是否存在

7

public boolean isDirectory()

普通

判断给定的路径是否在一个目录

8

public long length()

普通

返回文件的大小

9

public String[] list()

普通

列出指定目录的全部内容,只是名称

10

public File[] listFiles()

普通

列出指定目录的全部内容,会有路径

11

Public Boolean mkdir()

普通

创建一个目录

12

Public Boolean renameTo(File dest)

普通

为已有的文件重命名

IO流-文件操作示例

1. 创建一个新文件

  /**
     * 创建文件
     */
    public static void createFile() {
        File f=new File("D:\\test.txt");
        try{
            if(!f.exists()){
                f.createNewFile();
            }

        }catch (Exception e) {
            e.printStackTrace();
        }
    }

2. 向文件中写入字符串

/** * 文件写入 */ public static void wirteFile() throws IOException { String fileName="D:"+File.separator+"test.txt"; File f=new File(fileName); if(f.exists()){ OutputStream out =new FileOutputStream(f); String str="你好"; byte[] b=str.getBytes(); out.write(b); out.close(); } }3. 读取文件内容

/** * 文件读取 */ public static void readFile() throws IOException { String fileName="D:"+File.separator+"test.txt"; File f=new File(fileName); if(f.exists()) { InputStream in = new FileInputStream(f); byte[] b = new byte[1024]; int count = 0; int temp = 0; while ((temp = in.read()) != (-1)) { b[count++] = (byte) temp; } in.close(); System.out.println(new String(b)); } } 4.删除一个文件

 /**
     * 删除文件
     */
    public static void deleteFile() {
        String fileName="D:"+File.separator+"test.txt";
        File f=new File(fileName);
        if(f.exists()){
            f.delete();
        }else{
            System.out.println("文件不存在");
        }
    }