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

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


相关文章
|
12月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
224 3
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
149 0
|
Java
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
本文探讨了在Java中,当父类的方法返回`this`对象或变量时,子类调用该方法的行为,以及`this`关键字在不同类中调用方法时的指向问题。
83 0
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
|
Java
Java文件操作
本文介绍了Java中`File`类的使用方法,包括构造方法、常见成员方法及其实现功能。`File`对象可以表示文件或文件夹,支持绝对路径和相对路径。构造方法有三种:基于完整路径、父级路径与子路径组合、`File`对象与字符串组合。成员方法涵盖判断类型、获取大小、获取路径、创建与删除文件/文件夹、获取文件列表、重命名等操作。文章通过示例代码详细展示了各个方法的应用场景及注意事项。
129 1
Java文件操作
Java系列之 字符串和字节互转
这篇文章是关于Java中字符串和字节之间互转的方法,包括使用`getBytes()`方法将字符串转换为字节数组,以及使用String构造方法将字节数组转换回字符串。
|
缓存 Java 数据处理
|
Java 编译器
JAVA中的夫类与子类
JAVA中的夫类与子类
290 3
|
分布式计算 Java 调度
MaxCompute产品使用合集之使用Tunnel Java SDK上传BINARY数据类型时,应该使用什么作为数据类字节
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
102 0
|
存储 安全 Java
Java文件操作,让你的代码更“有型”!读写、复制、删除全解析!
【6月更文挑战第27天】在Java中进行文件操作是程序基础功能之一,涉及读写、复制和删除。使用`FileReader/FileWriter`进行文本文件的读写,如示例所示,通过`try-with-resources`保证资源释放。文件复制利用`FileInputStream/FileOutputStream`,而删除文件则依赖`File`的`delete()`方法,确保条件安全执行。这些标准库类提供了高效且健壮的文件管理能力。
125 0
|
安全 Java API
Java文件操作:从入门到精通,读写、复制、删除一个都不能少!
【6月更文挑战第27天】在Java编程中,学习文件操作至关重要,涵盖读写、复制和删除。入门文件读写涉及读取`example.txt`内容并追加文字;进阶文件复制展示如何使用`FileInputStream`和`FileOutputStream`从`source.txt`复制到`destination.txt`;精通文件删除则利用`File`的`delete()`方法安全删除`destination.txt`,前提检查文件存在且有权限。这些实例带你全面掌握Java文件操作基础!
126 0

热门文章

最新文章