【Java】文件操作篇(二)字节输入流、字节输出流及常用子类(上)

简介: 文章目录写在前面1 FileInputStream文件输入流1.1 构造方法与常用方法摘要1.2 文件输入案例2 FileOutputStream文件输出流2.1 构造方法与常用方法摘要2.2 文件输出案例2.3 文件拷贝3 处理流3.1 BufferedInputStream介绍3.2 BufferedOutputStream介绍

1 FileInputStream文件输入流

1.1 构造方法与常用方法摘要


🐦 方法摘要:


1.2 文件输入案例

word.txt里存储了若干个单词,请你使用 FileInputStream 读取 word.txt 文件,并将文件内容显示到控制台。


🐱 参考代码及结果:


方式一:一个一个字节的读取

import java.io.FileInputStream;
import java.io.IOException;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 读取 word.txt案例演示
 */
public class FileInputStreamTest1 {
    public static void main(String[] args){
        //1.创建FileInputStream对象
        String filePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\word.txt";
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(filePath);
            //2.read方法:读取单个字符,返回该字节码值,如果到达文件末尾,就返回-1
            //3.读取文件,并打印在控制台
            int readNum = 0;
            while ((readNum=fis.read()) != -1){
                char readChar = (char)readNum;
                if (readChar == '\n'){
                    System.out.println();
                }else {
                    System.out.print(readChar);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭文件流,释放资源
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

方式二:按照字节数组读取,提高效率

import java.io.FileInputStream;
import java.io.IOException;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 读取 word.txt案例演示
 */
public class FileInputStreamTest1 {
    public static void main(String[] args){
        //1.创建FileInputStream对象
        String filePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\word.txt";
        int readLen = 0;
        //一次读取8个字节
        byte[] buf = new byte[8];
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(filePath);
            //2.从输入流读取最多 buf.length 字节的数据到字节数组
            //3.读取文件,并打印在控制台
            //读取正常,则返回实际读取的字节数,返回-1则读取完毕
            while ((readLen=fis.read(buf)) != -1){
                String readString = new String(buf, 0, readLen);
                if ("\n".equals(readString)){
                    System.out.println();
                }else {
                    System.out.print(readString);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭文件流,释放资源
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


❓ 发现问题:


 在案例中,word.txt文件均是英文,如果包含汉字,则可能出现乱码。一般一个汉字按照3字节存储,但是按照字节方式去取值的时候,可能出现截断的情况, 比如,在某一次读取中只读了汉字3个字节中的1个字节,这就导致了乱码的情况。因此,Java提供了字符输入流,敬请期待下一篇博文。


2 FileOutputStream文件输出流

2.1 构造方法与常用方法摘要


方法摘要:


2.2 文件输出案例

使用FileOutputStream向wordtest.txt文件中输入一句话:Hello,world!

🐱 参考代码及结果:

import java.io.FileOutputStream;
import java.io.IOException;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 */
public class FileOutputStreamTest1 {
    public static void main(String[] args) {
        writeFile();
    }
    /**
     * 演示使用 FileOutputStream 将数据写入文件
     * 如果该文件不存在,则创建文件
     */
    public static void writeFile(){
        //创建 FileOutputStream 对象
        String filePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\wordtest.txt";
        FileOutputStream fos = null;
        try {
            //得到对象
            fos = new FileOutputStream(filePath);
            //写入字符串
            String str = "Hello, world!";
            fos.write(str.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //释放资源
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


🦁 说明:


案例中,是使用 new FileOutputStream(filePath) 创建方式,当写入内容时,会覆盖原来的内容;

如果不希望覆盖原来的内容,则应该采用追加的方式,将 append 参数设置为 true,即 new FileOutputStream(filePath,true);

2.3 文件拷贝

经过了对字节输入流与字节输出流的学习,下面尝试一下通过编程 实现对图片的拷贝操作。


相关文章
|
2月前
|
安全 Java 数据库连接
【Java每日一题】——第三十五题:一个父类Animal和两个子类Rabbit和Tiger描述动物世界的继承关系两个子类吃的行为各不相同(兔子吃草,老虎吃肉)但睡觉的行为是一致
【Java每日一题】——第三十五题:一个父类Animal和两个子类Rabbit和Tiger描述动物世界的继承关系两个子类吃的行为各不相同(兔子吃草,老虎吃肉)但睡觉的行为是一致
48 0
|
2月前
|
安全 Java 数据库连接
【Java每日一题】——第三十四题:设计一个学生类Student和它的一个子类Undergraduate
【Java每日一题】——第三十四题:设计一个学生类Student和它的一个子类Undergraduate
88 0
|
1天前
|
Java
【JAVA基础篇教学】第十三篇:Java中I/O和文件操作
【JAVA基础篇教学】第十三篇:Java中I/O和文件操作
|
2天前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
|
18天前
|
Java API
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
|
5月前
|
算法 Java 程序员
火爆Boss直聘的2023最牛字节Java面试手册!助你狂拿千份offer!
当下程序员现状 根据一些调查报告,可以了解到当下程序员的现状。 首先,从年龄分布来看,年轻的程序员占据了主导地位。 30岁以下的开发者占比最高,为81%,而40岁以上的开发者仅占3%。 这意味着,程序员这个行业在一定程度上是年轻化的,同时也面临着一些中年转行或者技术更新换代的问题。 在性别方面,男性程序员的比例在90%以上,女性程序员的比例较低。 这可能和传统观念中将程序员视为男性职业有关。然而,随着技术的普及和女性对计算机科学的兴趣逐渐提高,女性程序员的比例也在逐渐增加。 从职业发展来看,程序员的职业发展相对较慢。 虽然程序员的薪资普遍较高,但是工作压力也很大,需要不断学习和更
93 0
|
5月前
|
Java
【文件操作】Java -操作File对象
【文件操作】Java -操作File对象
35 0
|
2月前
|
Java
Java——子类的继承性
Java——子类的继承性
12 0
|
3月前
|
存储 缓存 Java
Java文件操作
Java文件操作
38 0
|
4月前
|
Java 编译器
【JAVA面向对象编程】--- 探索子类如何继承父类
【JAVA面向对象编程】--- 探索子类如何继承父类
19 0