章七、I/O —— File类、输入与输出、字节流与字符流、节点流与处理流

一、 File类


File类是java.io包中很重要的一个类

File类的对象可以表示文件,还可以表示目录,在程序中一个File类对象可以代

表一个文件或目录;

File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件

大小等;

File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作

●  构造方法

File(String pathName); //指定文件(或目录)名和路径创建文件对象

●  常用方法

boolean exists()        //判断文件是否存在

boolean isFile()        //判断是否为文件
boolean isDirectory()        //判断是否为目录

String getName()        //获得文件的名称

long length()        //获得文件的长度
boolean createNewFile()throws IOException       

//创建新文件,有可能要抛出IOException异常,必须捕捉

boolean delete()        //删除文件

public String[]list()        //将目录下子文件及文件名返回到String数组中

public File[] listFiles()        //将目录下子目录及文件的实例返回到File数组中

import javax.xml.transform.Source;
import java.io.File;
import java.util.Date;

/*
File类 的对象既可以表示文件,也可以表示文件夹
 */
public class Demo1 {
    public static void main(String[] args) {

        File f1 = new File("D:/JAVA/file/demo.txt");
        System.out.println(f1.canRead());//是否可读
        System.out.println(f1.canWrite());//是否可写入
        //判断文件是否存在
        System.out.println(f1.exists());
        //获取文件绝对地址
        System.out.println(f1.getAbsolutePath());
        System.out.println(f1.getName());//获取文件名
        System.out.println(f1.getParent());//文件的上一级地址
        System.out.println(f1.isDirectory());//是否是文件夹
        System.out.println(f1.isFile());//是否是普通文件
        //最后一次改写时间
        System.out.println(f1.lastModified());//返回的是长整型
        System.out.println(new Date(1710639257338L));//转为时间值

        System.out.println(f1.length());//文件的长度
        System.out.println(f1.isHidden());//是否为隐藏文件

    }
}
import java.io.File;
import java.io.IOException;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        File f1 = new File("D:/JAVA/file/a.txt");
//        if(!f1.exists()){
//            try {
//                f1.createNewFile();
//            } catch (IOException e) {//当上面代码有问题时,会运行下面这段
//                e.printStackTrace();
//            }
        //创建文件(当所访问的路径上无文件)
        if(!f1.exists()) {
            System.out.println(f1.createNewFile());
        }
        //删除文件
        System.out.println(f1.delete());

        File file = new File("D:/JAVA/file/download");
        //创建单级文件文件夹
        System.out.println(file.mkdir());
        //创建多级文件文件夹
        File file1 = new File("D:/JAVA/file/a/b");
        System.out.println(file.mkdirs());
        //删除一个文件夹时。文件夹必须为空
        file1.delete();
        //展示文件
        file=new File("D:/JAVA/file");
        File[] files = file.listFiles();
        for(File f:files){
            System.out.println(f);
        }

    }
}

二、 输入及输出的概念


        输入输出(I/O): 把电脑硬盘上的数据读到程序中,称为输入,input,进行数据的read 操作从程序往外部设备写数据,称为输出,即output,进行数据的write操作

三、 字节流与字符流


         Java中把用于对文件输入和输出的类 称为流 ,有一些类是以字节为读取单位的,有一些是以字符为单位读取数据的

  字节流

字节流读取时以字节为单位,可以读取任意文件(.mp3、.jpg等)

跳转:五、 字节流

  字符流

字符流读取时只能读取文本文件

跳转:六、 字符流

四、 输入流与输出流


流按着数据的传输方向分为:

        ● 输入流:往程序中读叫输入流。

        ● 输出流:从程序中往外写叫输出流。

● InputStream和OutputStream的子类都是字节流,可以读写二进制文件,主要处理音频、图片、歌曲、字节流,处理单元 为1个字节。

● Reader和Writer的子类都是字符流,主要处理字符或字符串,字符流处理单元为1个字符。 字节流将读取到的字节数据,去指定的编码表中获取对应文字字符。

五、 字节流


字节流中常用类:

        字节输入流 FileInputStream 类

        字节输出流 FileOutputStream 类

  字节输入流

基本方法 —— InputStream

        一、读取一个字节并以整数的形式返回(0~255),如果返回-1,表示已到输入流的末尾。

int read() throws IOException

        二、读取一系列字节并存储到一个数组buffer, 返回实际读取的字节数,如果读取前已到输入流的末尾返回-1

int read(byte[] buffer) throws IOException

        关闭流释放内存资源

void close() throws IOException

  字节输出流

● 基本方法 —— OutputStream

        一、向输出流中写入一个字节数据,该字节数据为参数b的低8

void write(int b) throws IOException

        二、将一个字节类型的数组中的从指定位置(off)开始的 len 个字节写入到输出流

void write(byte[] b, int off, int len) throws IOException

        关闭流释放内存资源

void close() throws IOException

 ●  具体实现

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class InputStream {
    public static void main(String[] args) throws IOException {
        //输入-从硬盘上把文件读入到程序
        /*
        输入代码
         */
        FileInputStream inputStream = new FileInputStream("D:/JAVA/file/streamDemo.txt");
//        System.out.println(inputStream.read());//97
//        System.out.println(inputStream.read());//98
//        System.out.println(inputStream.read());//99
//        System.out.println(inputStream.read());//100
//        System.out.println(inputStream.read());//-1
        //每次读取,当读取的不为-1时返回
        /*
        输出代码
         */
        FileOutputStream outputStream = new FileOutputStream("D:/JAVA/file/outDemo.txt");

        int b = 0;
        while((b = inputStream.read())!=-1){
            System.out.println(b);
            outputStream.write(b);
        }
        //注意读取后要销毁管道
        inputStream.close();
        outputStream.close();
    }
}

但,一次只读入一个字节过于慢,在 read()方法中,有一个

public int read(byte b[])        //返回值是一个int类型的

        传入一个byte数组,读取byte数组长度的字符存在byte数组里,返回值表示在byte数组中存入了 int 个字符,

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class InputStream2 {
    public static void main(String[] args) throws IOException {
        //输入流
        FileInputStream inputStream = new FileInputStream("D:/JAVA/file/streamDemo.txt");
        FileOutputStream outputStream = new FileOutputStream("D:/JAVA/file/outDemo.txt");

        byte[] bytes = new byte[10];
        //read(bytes); 一次读byte数组长度个字符
        //size 表示每次实际往数组中装入的元素个数
        int size = 0;
        //一次向外写出byte长度个字节内容,并从指定位置开始,写 size(有效范围)个字节
        while((size = inputStream.read(bytes))!=-1){
            outputStream.write(bytes,0,size);
        }
        inputStream.close();
        outputStream.close();
    }
}

六、 字符流


字符流中常用类

字符输入流   FileReader类

字符输出流    FileWriter类

  Reader 的基本方法

  

        读取一个字符并以整数的形式返回, 如果返回-1已到输入流的末尾。

int read() throws IOException

        读取一系列字符并存储到一个数组buffer, 返回实际读取的字符数,如果读取前已到输入流的末尾返回-1

int read( char[] cbuf) throws IOException

        关闭

void close() throws IOException

  Writer 的基本方法

        向输出流中写入一个字符数据,该字节数据为参数b16

void write(int c) throws IOException

        一个字符类型的数组中的数据写入输出流

void write( char[] cbuf) throws IOException

        将一个字符类型的数组中的从指定位置(off set)开始的 length个字符写入到输出流

void write( char[] cbuf, int off set, int length) throws IOException

        关闭

void close() throws IOException

七、 节点流与处理流


根据封装类型不同流又分为:节点流 和 处理流

● 节点流:

        如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流。

● 处理流:

        如果流封装的是其它流对象,称为处理流。 处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法(BufferedInputStream(缓存字节输入流)、DataInputStream(数据输入字节流)等)

  节点流中常用类

字节输入流 FileInputStream

字节输出流 FileOutputStream

字符输入流 FileReader

字符输出流 FileWriter

  处理流中常用类

缓冲字节输出流 BufferedOutputStream

缓冲字节输入流 BufferedInputStream

缓冲字符输入流 BufferedReader

缓冲字符输出流 BufferedWriter

import java.io.*;

public class BufferInputStreamDemo {
    public static void main(String[] args) throws IOException {
        FileInputStream inputStream = new FileInputStream("D:/JAVA/file/streamDemo.txt");
        BufferedInputStream bufferInputStream = new BufferedInputStream(inputStream);
        FileOutputStream outputStream = new FileOutputStream("D:/JAVA/file/outDemo.txt");
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);

        byte[] bytes = new byte[10];
        int size = 0;
        while ((size = bufferInputStream.read(bytes))!=-1){
            bufferedOutputStream.write(bytes,0,size);
        }
        bufferInputStream.close();
        bufferedOutputStream.close();
    }
}

相关推荐

  1. 节流字符的区别

    2024-03-17 21:24:01       26 阅读
  2. 字符输出

    2024-03-17 21:24:01       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 21:24:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 21:24:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 21:24:01       87 阅读
  4. Python语言-面向对象

    2024-03-17 21:24:01       96 阅读

热门阅读

  1. 手动数字哈希表-C语言

    2024-03-17 21:24:01       44 阅读
  2. 突破编程_C++_查找算法(二分查找)

    2024-03-17 21:24:01       48 阅读
  3. [NCNN学习笔记]-1

    2024-03-17 21:24:01       45 阅读
  4. KY127 统计字符

    2024-03-17 21:24:01       43 阅读
  5. PE文件格式知识点汇总

    2024-03-17 21:24:01       42 阅读