【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 文件拷贝

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


相关文章
|
6月前
|
安全 Java 开发者
掌握Java文件操作,让你的代码“飞”起来!读写、复制、删除全攻略!
【6月更文挑战第27天】Java文件操作涵盖读写、复制、删除。使用NIO的`Files`类提升效率:读取文件用`newBufferedReader`实现逐行读,写入文件用`newBufferedWriter`,复制文件用`copy`方法,删除文件用`deleteIfExists`,确保安全。这些最佳实践优化了内存使用,简化了代码。
40 0
|
2月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
137 3
|
2月前
|
Java
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
本文探讨了在Java中,当父类的方法返回`this`对象或变量时,子类调用该方法的行为,以及`this`关键字在不同类中调用方法时的指向问题。
16 0
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
|
3月前
|
Java
Java文件操作
本文介绍了Java中`File`类的使用方法,包括构造方法、常见成员方法及其实现功能。`File`对象可以表示文件或文件夹,支持绝对路径和相对路径。构造方法有三种:基于完整路径、父级路径与子路径组合、`File`对象与字符串组合。成员方法涵盖判断类型、获取大小、获取路径、创建与删除文件/文件夹、获取文件列表、重命名等操作。文章通过示例代码详细展示了各个方法的应用场景及注意事项。
42 1
Java文件操作
|
2月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
35 0
|
4月前
|
Java
Java系列之 字符串和字节互转
这篇文章是关于Java中字符串和字节之间互转的方法,包括使用`getBytes()`方法将字符串转换为字节数组,以及使用String构造方法将字节数组转换回字符串。
|
4月前
|
Java 编译器
JAVA中的夫类与子类
JAVA中的夫类与子类
|
4月前
|
缓存 Java 数据处理
|
6月前
|
Java API
惊呆了!Java文件操作竟能如此简单:一分钟学会读写、复制、删除!
【6月更文挑战第27天】Java编程中的文件操作简单易行。使用`java.io`包中的`FileInputStream`和`FileOutputStream`进行读写,例如写文件将字符串转为字节写入,读文件则循环读取字节。文件复制涉及两个流,从源文件读取后写入目标文件。删除文件只需调用`File`对象的`delete`方法。这些基本操作让Java文件处理变得直观且易于掌握。
37 1
|
5月前
|
分布式计算 Java 调度
MaxCompute产品使用合集之使用Tunnel Java SDK上传BINARY数据类型时,应该使用什么作为数据类字节
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。