IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java I/O流操作基础 -> 正文阅读

[Java知识库]Java I/O流操作基础

一? 流的基本概念

? 一个流(Stream)是一个有序的字节序列。当进行输入和输出数据操作时,数据从信息源流向目的地。流中的字节具有严格的顺序,按先进先出的要求操作。因此流式输入/输出(流式I/O)是一种顺序存取方式。?

Java中的流式I/O类都在java.io包中。有各种不同的流类来满足不同性质的输入/输出需求。?

按数据流向分为:输入/输出

按操作方法分为:字节(0/1)/字符流

字符流:Reader(抽象类) : (实现类)FileReader(普通输入)? BufferedReader(高效输入)(缓冲)

? ? ? ? ? ? ? ?Writer : FileWriter(普通输出)? BufferedWriter(高效输出)?

字节流:InputStream: FileInputStream(普通输入)? BufferedInputStream(高效输入)

? ? ? ? ? ? ? OutputStream:FileOutputStream(普通输出)? BufferedOutnputStream(高效输出)

二? File? 文件或文件夹

构造方法:?

File(String pathname)?//根据字符串形式的路径
File(String parent , String child) // 根据父目录与子目录
Flie(File parent , String child) //父目录是file的对象

成员方法:

创建功能://如果不存在,就创建返回true,否则就不创建,返回false
creatNewFile();  //创建文件  使用时需要注意异常:路径可能错误  可用throws在方法名后抛出异常
mkdir 或 mkdirs();  //创建目录(文件夹)mkdir : make directory的缩写
//mkdir 创建单级目录  //mkdirs  创建多级目录(也可以单级目录)
判断功能:
isDirectory();  //判断File对象是否为目录(文件夹)
isFile();  //判断file对象是否为文件
exists();  //判断file对象是否存在的
获取功能:
getAbsolutePath();  //获取绝对路径  绝对路径:以盘符开头的路径是固定死的  例如:D:/1.txt
getPath();  //获取相对路径  相对路径:一般指相对于当前项目的路径  例如 1.txt
getName();  //获取文件名
list();  //获取指定目录下所有文件(夹)名称数组
listFiles();  //获取指定目录下所有文件(夹)file数组
注意:  list() 的返回值是  String[] 字符串数组  在输出时需要使用for
    例:String[] name = file2.list();
        for(String names: name){
            System.out.println(names);
        } 
        listFiles()的返回值是  file[] File数组  相当于返回了File对象 即可调用file方法
    例:File[] files = file2.listFiles();
        for (File file : files) {
            System.out.println(file);
        }
        

注意:

  1. 盘符不区分大小写。
  2. Java中的 " \ "有特殊作用(被称为转义字符:转义后面一个字符所以在写路径时要写? ? ? ? “? \\ "? 或是 “ / ”。

三? 字符流读写文件

字符流读数据--按单个字符读取

创建字符流读文件对象:
   Reader  reader = new FileReader("文件路径"); //Reader为抽象类 不能实例化
调用方法读取数据:
   int date = reader.read();  //读取一个字符返回该字符代表的整数,若是达到末尾则返回 -1
异常处理:
   throws IOExpection //也可try catch
关闭资源:
   reader.close(); 
使用while简化
        int a = reader.read();
        while (a != -1){
            System.out.println(a);
            a = reader.read();
        }
注意:reader 每读取一次字符,指针向后移动一位。所以一次while里面只能读一次。

字符流读数据--按字符数组读取

创建字符流读文件对象:
    Reader reader = new FileReader("文件路径");
调用方法读取数据
    char[] chs = new char[];
    int len = reader.read(chs); //读取字符到数组中,返回读取的有效字符数,读不到有效则返回-1
异常处理:
    throws IOException
关闭资源:
    reader.close();
使用while 简化代码:
        char[] a = new char[1];
        while ((reader.read(a) != -1)){
            System.out.print(a);
        }
可得到全部文本

?字符流写数据--按单个字符写入

创建字符流写文件对象:
    Writer writer = new FileWriter("路径");
调用方法写入数据:
    char x = '中';
    writer.write(x);
异常处理:
    throws IOException;
关闭资源:
    writer.close();

字符流写数据--按字符数组写入

创建字符流写文件对象:
    Writer writer = new FileWriter("路径");
调用方法写入数据:
    char[] chs = {'中' , '国' ,‘好’};
    writer.write(chs);
异常处理:
    throws IOException;
关闭资源:
    writer.close();

字符流写数据--按字符串写入

创建字符流写文件对象:
    Writer writer = new FileWriter("路径");
调用方法写入数据:
    String s = "  "
    writer.write(s);
异常处理: 
    throws IOException;
关闭资源:
    writer.close();

注意:使用新对象写入文件后会将原文件内容覆盖

字符流拷贝文件--按单个字符写入

先创建字符流读文件对象:
    Reader reader = new FileReader("数据源文件的路径");
再创建字符流写文件对象:
    Writer writer = new FileWriter(“目的地文件的路径”);
调用方法读取文件:
    int date = reader.read();
调用方法写文件:
    writer.write("date"); //需要while循环   
        int len = reader.read();
        while (len != -1){
            writer.write(len);
            len = reader.read();
        }
                                            
异常类处理:
    throws IOExpection;
关闭资源:
    reader.close();
    writer.close();
核心6步:
1 创建输入流对象,关联数据源文件。
2 创建输出流对象,关联目的地文件。
3 定义变量,记录读取到的内容。
4 循环读取,只要条件满足,就一直读,并将读取到的内容赋值给变量。
5 将读取到的内容,写入目的地文件。
6 资源释放。
注意:当目的地文件不存在时可自动创建。

字符流拷贝文件--按字符数组写入

先创建字符流读文件对象:
    Reader reader = new FileReader("数据源文件的路径");
再创建字符流写文件对象:
    Writer writer = new FiLeWriter(“目的地文件的路径”);
调用方法读取文件:
    char[] chs = new char[2048]; //长度定义为1024的整数倍
调用方法写文件:
    int len;
    while(len = reader.read(chs) != -1){
        writer.write(chs , 0 , len);
    }
异常类处理:
    throws IOExpection;
关闭资源:
    reader.close();
    writer.close();

四? 字符缓冲流读写文件

字符缓冲流拷贝文件的标准代码

先创建字符流读文件对象:
    Reader reader = new BufferedReader(new FileReader(“数据源文件的路径”));
再创建字符流写文件对象:
    Writer writer = new BufferedWriter(new FileWriter(“目的地文件的路径”));
调用方法读取文件:
调用方法写文件:
        int len = reader.read();
        while (len != -1){
            writer.write(len);
            len = reader.read();
        }
异常类处理:
    throws IOExpection;
关闭资源:
    reader.close();
    writer.close();
注意:字符缓冲区的大小为16KB,底层按照字符数组读写

字符缓冲流拷贝文件的独有方法:一次读一行

BufferReader:
成员方法: public String readLine(); //一次读取一行并返回读取内容,读不到就返回null
BufferWriter:
成员方法: public void newLine(); //根据当前操作系统给出对应的换行符
        //使用BufferedReader声明,调用其特有方法
        BufferedReader br = new BufferedReader(new FileReader("lib/1.txt"));                     
        BufferedWriter bw = new BufferedWriter(new FileWriter("lib/3.txt"));
        String s;
        while ((s = br.readLine()) != null){
            bw.write(s);
            bw.newLine();
        }
        br.close();
        bw.close();

注意:字符流只能拷贝纯文本文件 txt

五? 字节流读写文件:

字节流拷贝文件--按单个字节读写:

创建字节流读文件对象:
   InputStream  is = new FileInputStream("文件源路径"); //InputStream为抽象类 不能实例化
创建字节流写文件对象:
   OutputStream os = new FileOutputStream("目的地路径");
异常处理:
   throws IOExpection 
使用while循环读写数据
        int a;
        while ((a = is.read()) != -1){
            os.write();
        }
关闭资源:
    is.close();
    os.close();
注意:reader 每读取一次字节,指针向后移动一位。所以一次while里面只能读一次。

字节流拷贝文件--按字节数组读写:

创建字节流读文件对象:
   InputStream  is = new FileInputStream("文件源路径"); //InputStream为抽象类 不能实例化
创建字节流写文件对象:
   OutputStream os = new FileOutputStream("目的地路径");
异常处理:
   throws IOExpection 
定义字节数组:
   byte[] b = new byte[1024];
使用while循环读写数据
        int len;
        while ((len = is.read(b)) != -1){
            os.write(b , 0 ,len);
        }
关闭资源:
    is.close();
    os.close();

六? 字节缓冲流读写文件

创建字节流读文件对象:
   BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件源"));
创建字节流写文件对象:
   BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("目的地"));
异常处理:
   throws IOExpection 
使用while循环读写数据
        int a;
        while ((a = bis.read()) != -1){
            bos.write(a);
        }
关闭资源:
    bis.close();
    bos.close();
字节缓冲区大小为8kb,底层按照字节数组读写

?总结:拷贝文件txt使用字符流,其他(图片,音频,视频)使用字节流

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:46:11  更:2021-07-17 11:46:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 10:20:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码