java IO笔记(FileInputStream/FileOutputStream)

Io流的FileInputStream和FileOutputStream的读取和写入 呵呵,今天又学了一个新的知识点。在Java这条路上,我们死磕到底的,呵呵 阅读详情

本篇要学习的是java io包中的FileInputStream类和FileOoutputStream类。

文件是我们常见的数据源之一,所以java为我们封装好了支持文件读写的流工具,下面我们通过源码分别来学习这两个类。

FileInputStream.java:

package java.io;

import java.nio.channels.FileChannel;
import sun.nio.ch.FileChannelImpl;

public class FileInputStream extends InputStream
{
    //内部声明了一个FileDescriptor对象的句柄,用于接收被打的文件的句柄。
    private final FileDescriptor fd;

    //内部声明了一个String类型的变量path,用于存放被打开文件的文件路径。
    private final String path;

    //声明了一个FileChannel对象,初始化为null。该对象后面在NIO的学习中会详细的提到,可以对文件进行操作
    private FileChannel channel = null;

    //定义了一个Object对象,为后面进行锁操作时提供对象锁。
    private final Object closeLock = new Object();
    //定义了一个booelan型变量,closed,来判断流是否关闭,注意的是该变量被volatile关键字修饰,保证了数据改变时的可见性。
    private volatile boolean closed = false;

    /**
     * 一个带一个参数的构造函数,传入的参数为所要打开文件的文件路径。创建时进行安全监测,检测传入参数是否为null,然后调用下一个构造函数。
     */
    public FileInputStream(String name) throws FileNotFoundException {
        this(name != null ? new File(name) : null);
    }

    /**
     * 一个带一个参数的构造函数,传入的参数为所要打开文件的file对象。创建是进行安全监测,检测file对象是否为null。
     */
    public FileInputStream(File file) throws FileNotFoundException {
        String name = (file != null ? file.getPath() : null);
        //获取当前应用的安全管理器SecruityManager,并对其是否有读取权限进行检测。
        SecurityManager security = System.getSecurityManager();
        if (security != null) {
            security.checkRead(name);
        }
	//如果传入文件的路径为null,抛出NullPointerException。
        if (name == null) {
            throw new NullPointerException();
        }
	//判断文件是否合法
        if (file.isInvalid()) {
            throw new FileNotFoundException("Invalid file path");
        }
	//创建一个文件描述符,并将本类对象依附到该文件描述符上,并将全局变量path赋值为传入文件的路径,最终通过一个native的open方法打开文件。这里的attach
	//方法目的时方便最后的close方法调用时,可以方便的关闭所有需要关闭的资源,这就是我们使用多个包装流的时候无需一个一个的关闭所有流的原因。
        fd = new FileDescriptor();
        fd.attach(this);
        path = name;
        open(name);
    }

    /**
     * 一个带有一个参数的构造方法,传入的参数为一个文件描述符。开始时需要对传入参数进行安全监测,如果为null,则抛出NullPointerException。
     */
    public FileInputStream(FileDescriptor fdObj) {
	//获得java的安全管理器。
        SecurityManager security = System.getSecurityManager();
        if (fdObj == null) {
            throw new NullPointerException();
        }
	//如果成功获得了安全管理器,则对传入的文件描述符进行权限检测,是否具有读数据的权限。
        if (security != null) {
            security.checkRead(fdObj);
        }
	//将传入的文件描述符fdObj赋值给全局变量fd,全局变量path赋值为null,将本类对象依附到文件描述符之上。
        fd = fdObj;
        path = null;
        fd.attach(this);
    }

    /**
     * 一个native关键字修饰的open方法,含有一个String类型的参数,传入的参数为所需打开文件的路径。关于native方法因为牵扯到c/c++,以后再开篇幅具体描述。
     * 此时只需知道该方法用于打开一个文件。
     */
    private native void open(String name) throws FileNotFoundException;

    /**
     * read方法,实际调用native方法read0()来实际读取文件。
     */
    public int read() throws IOException {
        return read0();
    }

    private native int read0() throws IOException;

    private native int readBytes(byte b[], int off, int len) throws IOException;

    /**
     * 一个带参的read方法,传入的参数为一个byte型数组,最终调用native方法readBytes方法
     */
    public int read(byte b[]) throws IOException {
        return readBytes(b, 0, b.length);
    }

    public int read(byte b[], int off, int len) throws IOException {
        return readBytes(b, off, len);
    }

    /**
     * 一个native关键字修饰的skip方法,传入的参数为一个long型数据,方法用于跳过传入的长度进行阅读。
     */
    public native long skip(long n) throws IOException;

    /**
     * 该方法返回一个预估的流中还可以读取的数据长度
     */
    public native int available() throws IOException;

    /**
     * 用于关闭流。
     */
    public void close() throws IOException {
	//加了一个同步锁,用来设置closed状态值。
        synchronized (closeLock) {
            if (closed) {
                return;
            }
            closed = true;
        }
	//如果文件管道不为null,调用相应的close方法。
        if (channel != null) {
           channel.close();
        }
	//调用文件描述符的closeAll方法,会将所有依附的系统资源全部释放。
        fd.closeAll(new Closeable() {
            public void close() throws IOException {
               close0();
           }
        });
    }

    /**
     * 获得当前流中读取文件的文件描述符
     */
    public final FileDescriptor getFD() throws IOException {
        if (fd != null) {
            return fd;
        }
        throw new IOException();
    }

    /**
     * 获取当前流中所要读取文件的文件管道。
     */
    public FileChannel getChannel() {
        synchronized (this) {
            if (channel == null) {
                channel = FileChannelImpl.open(fd, path, true, false, this);
            }
            return channel;
        }
    }

    // 用于设置fd的内存地址偏移量,牵扯到JNI编程,这里不细说。
    private static native void initIDs();

    private native void close0() throws IOException;

    static {
        initIDs();
    }

    /**
     * 重写了finalize方法,用于再一次确定资源的关闭。需要注意的是当fd被分享出去后,必须等到所有使用到fd引用的资源都不可达时,调用close方法。
     */
    protected void finalize() throws IOException {
        if ((fd != null) &&  (fd != FileDescriptor.in)) {
            close();
        }
    }
}


FileOutput.java:

package java.io;

import java.nio.channels.FileChannel;
import sun.nio.ch.FileChannelImpl;

public class FileOutputStream extends OutputStream
{
    /**
     * 内置了一个文件描述符的句柄,用于接收打开文件的文件描述符对象。
     */
    private final FileDescriptor fd;

    /**
     * 声明了一个boolean类型的变量append,该变量值用于控制打开文件写入时是以追加的形式写入数据还是以覆盖的形式写入数据。
     */
    private final boolean append;

    /**
     * 内置了一个文件管道,用于接收打开文件的文件管道对象。它的初始化不是最初就初始化的,只有在需要时(调用getChannel方法时)才会进行初始化。
     */
    private FileChannel channel;

    /**
     * 声明了一个String类型的变量,用于接收打开文件的路径名。
     */
    private final String path;

    //定义了一个Object对象,为后面的同步操作提供同步锁。
    private final Object closeLock = new Object();
    //定义了一个boolean型变量closed,用来控制当前流对象是否关闭。用volatile关键修饰后,保证了数据改变时的可见性。
    private volatile boolean closed = false;

    /**
     * 一个带有一个参数的构造函数,传入的参数类型为String类型,为要写入文件的路径,内部调用了下面的带两个参数的构造方法,默认写人模式是覆盖的。
     */
    public FileOutputStream(String name) throws FileNotFoundException {
        this(name != null ? new File(name) : null, false);
    }

    /**
     * 一个带有两个参数的构造函数,第一个参数为String类型,为要写入文件的路径,第二个参数为一个boolean型变量,用于控制文件写入时的方式。内部调用另一个构造
     * 函数。
     */
    public FileOutputStream(String name, boolean append)
        throws FileNotFoundException
    {
        this(name != null ? new File(name) : null, append);
    }

    /**
     * 一个带有一个参数的构造函数,传入的参数类型为一个File对象,内部继续调用其它的构造函数,默认写入方式是覆盖的。
     */
    public FileOutputStream(File file) throws FileNotFoundException {
        this(file, false);
    }

    /**
     * 带两个参数的构造函数,其它的构造函数最终都是调用该构造函数,第一个参数为一个File类型,表示要打开的文件,第二个参数是一个boolean型变量,用于控制写
     * 入时是覆盖还是追加。
     */
    public FileOutputStream(File file, boolean append)
        throws FileNotFoundException
    {
	//获取打开文件的路径。
        String name = (file != null ? file.getPath() : null);
	//获取java安全管理器,对当前是否具有写入的权限进行检查。
        SecurityManager security = System.getSecurityManager();
        if (security != null) {
            security.checkWrite(name);
        }
	//检测是否成功获得文件路径名。
        if (name == null) {
            throw new NullPointerException();
        }
	//检测传入的文件是否合法。
        if (file.isInvalid()) {
            throw new FileNotFoundException("Invalid file path");
        }
	//将该流与文件描述符相依附,为后面进行close时提供便捷。
        this.fd = new FileDescriptor();
        fd.attach(this);
        this.append = append;
        this.path = name;
	//调用native方法open,打开需要就行写入的文件。
        open(name, append);
    }

    /**
     * 一个带一个参数的构造函数,参数类型是文件描述符类型,具体过程同上,此处不再细说。
     */
    public FileOutputStream(FileDescriptor fdObj) {
        SecurityManager security = System.getSecurityManager();
        if (fdObj == null) {
            throw new NullPointerException();
        }
        if (security != null) {
            security.checkWrite(fdObj);
        }
        this.fd = fdObj;
        this.append = false;
        this.path = null;

        fd.attach(this);
    }

    /**
     * 用于打开指定文件,第一个String类型参数为需要打开文件的路径,第二个boolean类型参数为打开模式,是追加还是覆盖。
     */
    private native void open(String name, boolean append)
        throws FileNotFoundException;

    /**
     * 用于向打开文件中写入数据,第一个参数是一个int型变量,为要写入的数据,第二个boolean型参数为写入时是追加还是覆盖。
     */
    private native void write(int b, boolean append) throws IOException;

    /**
     * 向文件中写入数据,内部调用上面的native方法进行写入。
     */
    public void write(int b) throws IOException {
        write(b, append);
    }

    /**
     * 向文件中写入数据,不过不是一次写入一个字节,而是通过一个byte数组作为缓存,一次写入一批数据。
     */
    private native void writeBytes(byte b[], int off, int len, boolean append)
        throws IOException;

    /**
     * 向文件中写入数据,将传入的byte数组中的内容全部写入至文件中。
     */
    public void write(byte b[]) throws IOException {
        writeBytes(b, 0, b.length, append);
    }

    /**
     * 向文件中写入数据,传入的三个参数分别是写入的数据源一个byte数组,后两个参数为写入数据的起点以及写入数据的长度。
     */
    public void write(byte b[], int off, int len) throws IOException {
        writeBytes(b, off, len, append);
    }

    /**
     * 该方法用于关闭流及与其相关联的所有的系统资源。
     */
    public void close() throws IOException {
        synchronized (closeLock) {
            if (closed) {
                return;
            }
            closed = true;
        }

        if (channel != null) {
            channel.close();
        }

        fd.closeAll(new Closeable() {
            public void close() throws IOException {
               close0();
           }
        });
    }

    /**
     * 获得打开文件的文件描述符。
     */
     public final FileDescriptor getFD()  throws IOException {
        if (fd != null) {
            return fd;
        }
        throw new IOException();
     }

    /**
     * 获得打开文件的文件管道。
     */
    public FileChannel getChannel() {
        synchronized (this) {
            if (channel == null) {
                channel = FileChannelImpl.open(fd, path, false, true, append, this);
            }
            return channel;
        }
    }

    /**
     * 重写了finalize方法,调用close方法保证流与其关联的资源能够获得释放。如果是标准输出流或者错误输出流,还会调用flush方法。
     */
    protected void finalize() throws IOException {
        if (fd != null) {
            if (fd == FileDescriptor.out || fd == FileDescriptor.err) {
                flush();
            } else {
                close();
            }
        }
    }

    private native void close0() throws IOException;

    private static native void initIDs();

    static {
        initIDs();
    }

}


上面附上了两个类的源码,并附上了一些简单的注释。下面我们就用具体的例子来加深我们对这两个类的理解。

下面的例子实现了简单的文件复制:

package FileInputOutput;

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

public class FileIOTest {
	public static void main(String[] args) {
		byte[] buffer = new byte[1024];
		try (FileInputStream fis = new FileInputStream("./src/file/test.txt");
				FileOutputStream fos = new FileOutputStream(
						"./src/file/testcopy.txt")) {
			while (fis.read(buffer) != -1) {
				fos.write(buffer);
			}
			System.out.println("复制完成");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


执行上述代码后可以看到在指定目录下复制了一份test.txt文件,文件中内容也被完整复制过来。

以上为本篇内容。





南京理工大学计算机预推免面试(双非重点关注) 南京理工大学总体来说对双非学校比较友好,上岸率比较高,而且面试形式是线上,在预推免的过程中,可以作为重点关注的学校,但是一定要注意南理报名截止的时间,部分学校可能保研名额公示的比较晚,对于保研边缘人来说很可能会错过,我的建议是,即使不确定能否拿到保研名额,先查一下截止时间,先在系统上报名!!一旦拿到了offer,就是铁的,保底专硕,而且有很大的技巧性,一定要认真看哈!!!每个人的情况可能都不一样,如果有需要帮忙可以私我~~~ 阅读详情

相关推荐

R链式中介:如何一次性生成4个变量所有可能的链式中介结果?(含结果解读与粗略作图)#bruceR#ggplot2

一次性生成4个变量所能生成的24种链式中介并作图

weixin_64183017的博客 3236

Java-IO流详解

1.File类 File类可以使用文件路径字符串来创建File实例,该文件路径可以是绝对路径,也可以是相对路径,相对路径的解释是依据默认路径(user.dir),即用户工作路径 一个File对象就代表一个文件或一个目录 路径分隔符 windows中使用的是\\ Linux、Unix以及URL中使用的是/ java也支持在windows中使用/如果为了避免出现跨平台问题,可以使用File类的一个常量public static final String separator File

杰尼龟的小龟壳的博客 686

iOS反编译-hook微信之艾特所有人

all。

2501_90243249的博客 759

javaIO流

练习:从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,直至当输入“e”或者“exit”时,退出程序。用于存储和读取基本数据类型数据或对象的处理流。

m0_53550060的博客 350

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

添加新设备(PLC)->设备和网络管理->点击PLC->看到硬件目录选择通信板->点到点->CB1241(RS485)->看到6ES7241-1CH30-1XB0选择添加,如图。指向Modbus保持寄存器数据块的指针 我这里指向了自定义的DB块数据中一个INT数组。在通信->通信处理模块->MODBUS(选择不带RTU的通信指令块)注意:接线时,TRA接485调试模块的B- TRB接调试模块的A+组态后的硬件标识符 270 对应自己组态后自动生成的。1:事务完成,且无任何错误。波特率对应自己使用的。

swmyaopeng的博客 2万+

ROS专栏—基于STM32F103的INA219电源数据采集

文章主要记录了stm32f103对ina219的数据采集

热爱生活、奋斗前行 2353

Java IO 流操作详解

Java IO流提供了一种可以对数据进行输入输出的机制。可以把它比作是一条河流从源头流向目标地,由源文件输入到程序再由程序输出到目标文件。IO即Input/Output顾名思义就是数据的输入输出,在Java中指的是java.io包中的类库,提供了一系列操作数据输入与输出的类和接口。Java NIO(New IO)是JDK1.4引入的新的IO API,能够以更高效的方式进行文件、网络读写等各种I/O操作。

BXA 2499

15、分布式参数热交换器:建模、动态特性与控制

本文综述了分布式参数热交换器的建模、动态特性和控制方法。从热交换器的基本方程推导出发,探讨了一维流动、流动强迫、错流、螺旋和旋转再生式热交换器的建模方法,并分析了其动态行为和频率响应中的共振现象。同时,介绍了热交换器的模拟方法,包括数值模拟和近似方法,并讨论了多种控制策略,如常规控制、最优控制、数字控制以及自适应控制。最后,总结了热交换器研究的发展历程,并展望了未来的研究方向,包括建模精度提升、控制算法优化和跨学科融合等。

w8x9y0z1的博客 123

Java I/O 教程(三) FileOutputStream类

Java FileOutputStream 用于将字节数据写入文件。 如果你需要将原始数据写入文件,就使用FileOutputStream类。 Java.io.FileOutputStream class声明如下: public class FileOutputStream extends OutputStream 构造函数 FileOutputStream(File fi

老徐的博客只有干货 1708

6、云计算中的多核技术:架构、并行性与局限性

本博文深入探讨了云计算中多核技术的架构、并行性及其局限性。文章详细介绍了多核处理器的基础概念、并行硬件和软件的设计原理,并对硬件和软件并行性进行了分类和分析。同时,文章讨论了多核架构在实际应用中面临的挑战,如功率墙、内存墙和ILP墙等问题,并提出了应对策略。此外,还总结了多核技术在高性能计算、实时处理和云计算等领域的应用机遇。文章旨在帮助读者更好地理解多核技术的关键问题,并为未来的技术探索提供方向。

java5的博客 122

【数据集】1970-2023年全球温室气体排放 GHG 数据集 EDGAR

1970-2023年全球温室气体排放 GHG 数据集 EDGAR

WW、forever的博客 1172

java进阶笔记九(IO流/FileInputStream/FileOutputStream/复制文件)

(2)所有输出流都实现了java.io.Flushable,都是可刷新的,有flush()方法,将未输出的数据强行输出完(清空管道),输出流在最终输出后,一定要刷新。(1)java.io.closeable接口都是可关闭的,都有close()方法,流使用完一定要关闭,避免占用资源。4、序列化writeObject,序列化多个,放到集合里循坏,反序列化readObject。6、序列化版本号作用:用来区分类,不用自动生成的序列号,手动生成固定的。(1)字节读取,类型不受限制(输入流、输出流)

kekexiaomayi的博客 943

信奥赛csp初赛高频考点【位运算】(详细解析)

信奥赛csp初赛高频考点【位运算】(详细解析)

王老师青少年编程 368

java io读书笔记(8)FileInputStream/FileOutputStream的应用

转自:http://www.cnblogs.com/jjtech/archive/2011/04/17/2019210.html 这是一对继承于InputStream和OutputStream的类,用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象); 本地文件读写编程的基本过程为: ① 生成文件流对象(对文件读操作时应该为FileInputStream...

weixin_30535843的博客 137

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java基础知识强化之IO流笔记26:FileInputStream / FileOutputStream 复制mp4视频的案例

1.需求:把D:\\English.mp4 复制到当前项目目录下copy.mp4 代码示例: 1 package com.himi.filecopy; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 ...

weixin_30530523的博客 2048

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java基础知识强化之IO流笔记25:FileInputStream / FileOutputStream 复制图片案例

1.需求:把D:\\美女.jpg 复制到当前项目目录下mn.jpg 代码示例: 1 package com.himi.filecopy; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 /** ...

weixin_30767835的博客 157

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java基础知识强化之IO流笔记22:FileInputStream / FileOutputStream 复制文本文件案例1...

1. 使用字节流FileInputStream / FileOutputStream 复制文本文件案例: 分析: (1)数据源:从哪里来 a.txt -- 读取数据 -- FileInputStream (2)目的地:到哪里去 b.txt -- 写数据 -- FileOutputStream 2. 代码示例: 1 package cn.itc...

weixin_30906701的博客 130

Java基础知识强化之IO流笔记24:FileInputStream / FileOutputStream 复制文本文件案例2...

1. 需求:把d盘下的a.txt的内容复制到f盘下的b.txt中: 代码示例: 1 package com.himi.filecopy; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 8 /*...

weixin_30485291的博客 132

Java IO流(FileInputStream,FileOutputStream及File)讲解

File类的使用 在介绍流的概念之前,我们需要知道并且明确File和IO流是什么关系。 java.io.File类:文件和目录路径名的抽象表示形式 File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。 File对象可以作为参数传递给流的构造函数 File的构造函数 参考在线的jdk文档:https://blog.fondm...

高度不够看到的都是问题,格局太小纠结的都是鸡毛蒜皮。 5946

JAVA中常用IO流类:FileInputStream和FileOutputStream

FileInputStream 用于读取本地文件中的字节数据,继承自InputStream类 构造方法摘要 FileInputStream(File file)            通过打开一个到实际文件的连接来创建一个FileInputStrea

caixiexin的专栏 11万+

Java IO详解:File、FileInputStream与FileOutputStream

Java文件IO操作的核心类包括File、FileInputStream和FileOutputStream,它们构成了文件处理的基础。File类用于管理文件路径和元数据操作,但不涉及内容读写。FileInputStream和FileOutputStream分别实现字节流的读取和写入功能,支持原始字节数据的文件操作。文章详细解析了这些类的构造方法、核心API及使用场景,并对比了字节流与字符流的差异。最佳实践建议使用缓冲流提升性能,同时强调了资源关闭和异常处理的重要性。全文从源码层面剖析设计原理,为开发者掌握J

百锦再的博客 1479

Java中的IO流字节流(FileOutputStream与FileInputStream)+编码与解码

Java中的IO流是用于输入和输出数据的工具。write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符。字节输出流,可以把程序中的数据写到本地文件上,是字节流的基本流。如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。一次读一个字节,读出来的是数据在ASCII上对应的数字。一次读取多个字节数据,具体读多少,跟数组的长度有关。但是这样写对于文件过大的情况,运行的会非常的慢。文件拷贝,编码和解码

m0_46702681的博客 1293

【Java】—— File类与IO流:FileReader\FileWriter、FileInputStream\FileOutputStream

从输入流中读取一些字符,并将它们存储到字符数组 cbuf中,从cbuf[off]开始的位置存储。如果已经到达流末尾,没有数据可读,则返回-1。:从输入流中读取一些字节数,并将它们存储到字节数组 b中,从b[off]开始存储,每次最多读取len个字节。:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。

weixin_63106307的博客 1543

FileInputStream和FileOutputStream

和是 Java I/O中用于处理文件输入和输出的流类。它们是字节流,用于读取和写入字节数据。:用于从文件中读取字节数据。它继承自类。通过创建对象,可以打开一个文件,并从该文件中读取数据。可以使用read()方法逐个字节地读取数据,也可以使用方法一次读取多个字节到字节数组中。读取完成后,应该调用close()方法关闭流。:用于向文件中写入字节数据。它继承自类。通过创建对象,可以打开一个文件,并向该文件中写入数据。可以使用write(int)方法逐个字节地写入数据,也可以使用方法一次写入多个字节。

weixin_75202470的博客 4641

Java IO 中的 FileInputStream 和 FileOutputStream

FileInputStream 和 FileOutputStream:用于文件的字节读写。

yuiezt的专栏 1009

【JAVA的 IO流之FileInputStream和FileOutputStream】

java的 IO流即输入输出流,流是一组有顺序的,有起点和终点的字节结合,是对数据传输的总称。即数据在两设备间的传输称为流,流的本质是数据传输。     IO流可以分为字节流和字符流。给出相应的IO结构图: 在接下来的一段时间里,将会慢慢介绍各种流的使用,本篇博客先介绍字节流的FileOutputStream和相对应的FileInputStream。 一.FileOutputSt

u014714340的专栏 666
上一篇: Java IO笔记(StreamTokenizer)
下一篇: java IO笔记(FileterInputStream/FilterOutputStream)
moonfish0607
博客等级 码龄11年 26粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

moonfish0607

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值