FileOutputStream类(jdk1.0)

描述

  • java.io.FileOutputStream 类是文件字节输出流,用于将数据写入到文件中。

构造方法

//构造方法
FileOutputStream​(File file) 创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream​(String name) 创建文件输出流以指定的名称写入文件。
*参数
* file file:目的地是一个文件
* string name:目的地是一个文件路径
//当你创建一个流对象时,必须先传递一个文件路径,该路径下,如果没有这个文件,会创建该文件
//,如果有这个文件,会清空这个文件中的数据。然后把你想要的数据写入中。 FileOutputStream(File file,boolean append);创建文件出入流以写入由指定的File对象表示的文件中。
FileOutputStream(String name,boolean append);创建文件输出流以指定的名称写入文件中
//这两个构造方法,参数中都需要传入一个Boolean类型的值,
//true表示的追加数据,false表示覆盖原文件

代码实例

public static void main(String[] args) throws IOException {
//FileOutputStream​(String name) 创建文件输出流以指定的名称写入文件。
FileOutputStream fops = new FileOutputStream("day28_IO\\a.txt");
//调用写入方法
fops.write(97);
//关闭流
fops.close();
}

图集分析

数据的追加续写

  • 如何在保留文件中的数据,还能继续添加新的数据到目标文件中?
  • 使用带两个参数地构造方法

代码实例

	//创建对象
File file = new File("day28_IO\\c.txt");
FileOutputStream fops = new FileOutputStream(file,true);
//调用write方法写入
fops.write("张三".getBytes());
//关闭流
fops.close();

写入换行

  • windows系统里,换行符是: \r \n。把以指定是否需要追加续写换行。

    linux系统中,换行符号是: /r /n.

    mac系统中,换行符号是 :/r

    unix系统里,每行结尾只有换行,即: \n

  • 回车符\r和换行符\n

    回车符:回到一行的开头。

    换行符:下一行(new Line)。

  • 系统中的换行:

    windows系统中,每行结尾是:回车加换行。即,\r\n。

    Linux系统中,每行的结尾只有换行,即,/n。

    mac系统中,每行的结尾是回车,即,/r。

FileInputStream类

描述

  • java.io.FileInputStream 类是文件输入流,从文件中读取字节。

常用方法

//构造方法
FileInputStream​(File file) 通过打开与实际文件的连接来创建一FileInputStream ,该文件由文件系统中的 File对象 file命名。
FileInputStream​(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
//当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileFoundException。
//普通方法
int available​() 返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。

读取数据的原理

  • java --> JVM --> OS --> OS调用系统中读取数据的方法 -->读取文件中的数据

代码实例

public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("C:\\c.txt");
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
//System.out.println(new String(bytes));
System.out.println(new String(bytes, 0, len));
}
fis.colos();
}
//可以使用字节数组来读取数据:read(byte[] b):从输入流中读取多个字节,并且将其存储到缓冲区数组b当中
  • 备注;使用数组读取,每次可以读取多个字节,减少系统间的io操作次数,从而提高了读取的效率,建议使用。

  • 练习从系统中读取一个图片复制到桌面上

    //1.创建一个字节输入流对象,构造方法中绑定需要读取的路径
    //2.创建一个字节输出流对象,构造方法中绑定需要写入的文件
    //3.使用字节输入流对象中的read方法读取文件
    //4.使用字节输出流对象中的write方法,把读取到字节写入到指定的文件中
    //5.释放资源(先开的后关,后开的先关/相当于栈)
    //复制文件
    public static void main(String[] args) throws IOException {
    //来源
    File source = new File("D:\\aa.jpeg");
    //目的地
    File destination = new File("E:\\bb.jpeg");
    try (FileInputStream fis = new FileInputStream(source);
    FileOutputStream fos = new FileOutputStream(destination)
    ) {
    System.out.println(fis.available() + "available");
    //public int available​() throws IOException 获取文件字节
    byte[] arr = new byte[fis.available()];
    int a = 0;
    while ((a = fis.read(arr)) != -1) {
    fos.write(arr);
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

FileReader

描述

  • java.io.FileReader 类主要适用于读取字符文件的便携类。构造方法使用默认的编码字符集和默认的字符缓冲区。

    备注;

    1. 字符编码:字节于字符对应的规则。Windows系统中的编码默认是GBK编码表,idea中采用的是utf-8
    2. 字节缓冲区:一个字节数,用来临时存储字节数据。

构造方法

FileReader(File file);创建一个新的FileRead对象,File是指定需要读取的对象
FileReader(String filename);创建一个新的FileReader对象,指定需要读取的文件名称
参数;读取文件的数据员
String filename;文件的路径
File file;一个文件
构造方法的作用
1.创建FileReade一个对象
2.会把创建FileReade对象指向需要读取的文件
//当你创建一个流对象时,必须传入一个文件路径,类似于FileInputStream

练习

public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("day28_IO\\c.txt");
/* int temp = 0;//记录读取的字符
while ((temp = fr.read()) != -1) {
System.out.print((char) temp);//强转
}*/
int temp = 0;//记录的是每次读取的有效个数
char[] c = new char[1024];
/*
* char数组类型转字符串
* static String.valueOf(参数列表);
* String(char[] value)
* String (char[] value,int offset,int count)
* */
while ((temp = fr.read(c)) != -1) {
// System.out.print(String.valueOf(c));
System.out.println(new String(c));
}
fr.close();
}
//使用字符数组读取数据;read(char[] chuf),每次读取chuf的长度个字符数组当中,返回读取到有效字符的个数。当它读取到末尾时,返回-1.

FileWriter

描述

  • java.io.FileWriter 类是用于写入字符到文件中。构造方法使用系统默认的字符编码和默认的字节缓冲区。

构造方法

//构造方法
FileWriter(File file);创建一个新的FileWriter,指定写入的file对象
FileWriter(String filename);创建一个新的FileWriter,指定需要写入的文件的名称
FileWriter​(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
FileWriter​(File file, boolean append) 给一个File对象构造一个FileWriter对象。
//当你创建一个流的对象时,必须传入一个文件路径

flush和close方法的区别

  1. flush():刷新缓冲区,流对象可以继续使用
  2. close():先刷新缓冲区,然后通知系统释放资源,关闭流对象,流对象不可以在使用了。
  • 关闭和刷新

    因为内置缓冲区的原因,如果不关闭输出流,无法写入字符到文件中。但是关闭流对象,是无法继续写入数据到文件中。如果既想写入数据到文件中,又想继续使用流对象,那么就是使用到方法flush。
  • 续写和换行操作类似于FileOutputStream

练习

    //字节流练习2:使用字节流把a文件中的数据转换后写到b文件中  大写转换为小写 小写转换为大写 删除数字
@Test
public void test2() throws IOException {
try (FileReader fr = new FileReader("E:\\aa\\aa.txt");
FileWriter fw = new FileWriter("");) { //FileWriter fw = new FileWriter("");
int temp = -1;
while ((temp = fr.read()) != -1) {
char ch = (char) temp;
if (Character.isLetter(ch)) {
if (Character.isLowerCase(ch)) {
char c = Character.toUpperCase(ch);
fw.write(c);
} else {
char c = Character.toLowerCase(ch);
fw.write(c);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

节点流(或文件流):注意点

  • 定义文件路径是,注意:可以用 / 或者 \\
  • 在写入一个文件是如果使用 构造器 FileOUtputSteram(file),则目录下有同名文件将被覆盖.
  • 如果使用构造器 FileOutputStream(file,true),则目录下地同名文件不会倍覆盖,

    在文件内容末尾追加内容
  • 读取文件时,必须保证文件已经存在,否则报异常.
  • 字节流操作字节,比如: .mp3 .avi .rmvb .mp4 .jpg .doc .ppt
  • 字符流操作字符,只能操作普通文本文件.最常见地文本文件:

    .txt .java .c .cpp 等语言地源代码.尤其注意: .doc .excel ppt这些不是文本文件.

io流-文件流\节点流的更多相关文章

  1. class ObjectOutputStream也是过滤流,使节点流直接获得输出对象。

    class ObjectOutputStream也是过滤流,使节点流直接获得输出对象. 最有用的方法:WriteObject(Object b) 用流传输对象称为对象的序列化,但并不使所有的对象都可以 ...

  2. IO学习二(节点流)

    1.流的分类 按照数据流向的不同:输入流和输出流 按照处理数据的单位不同:字节流((非文本文件)视频.音频.图像).字符流(文本文件) 按照角色的不同:节点流和处理流 2.IO体系 抽象基类 节点流 ...

  3. Java文件与io——复制文件和转换流

    字节流与字符流的区别 在所有的流操作里,字节永远是最基础的.任何基于字节的操作都是正确的.无论是文本文件还是二进制的文件. 如果确认流里面只有可打印的字符,包括英文的和各种国家的文字,也包括中文,那么 ...

  4. java io 节点流和处理流

    JAVA IO操作总结:节点流和处理流 JAVA IO操作总结--节点流和处理流  按照流是否直接与特定的地方(如磁盘.内存.设备等)相连,分为节点流和处理流两类. 节点流:可以从或向一个特定的地方( ...

  5. IO流之节点流(字节流)

    节点流可以分为:字节节点流和字符节点流 数据源直接到程序的成为节点流(低级流) 字节流 输入流----InputStream InputStream 是输入流的抽象父类,若创建对象,需new它的子类 ...

  6. JAVA的节点流和处理流以及流的关闭顺序

    今天在编写hadoop程序的时候,用到了流的处理.关闭流的时候出现了问题: 代码: FSDataInputStream fsin = fs.open(new Path(filein)); FSData ...

  7. Java IO详解(二)------流的分类

    一.根据流向分为输入流和输出流: 注意输入流和输出流是相对于程序而言的. 输出:把程序(内存)中的内容输出到磁盘.光盘等存储设备中      输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内 ...

  8. JAVA的节点流和处理流

    节点流:可以从或向一个特定的地方(节点)读写数据.如FileReader. 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写.如BufferedReader.处理流的构造方 ...

  9. 节点流和处理流(BufferedReader和BufferedWriter,BufferedInputStream和BufferedOutputStream,ObjectlnputStream和objectOutputStream)

    一.基本介绍: 1.节点流可以从一个特定的数据源读写数据,如FileReader. FileWriter 如图:字节流是直接对数据源(文件,数组之类存放数据的地方)进行操作 2.处理流(也叫包装流)是 ...

  10. Java-IO中的节点流和处理流

    理解好Java-IO中的节点流和处理流是理解Java输入.输出的关键基础,因此,了解节点流和处理流相关的知识点尤为重要. 1.定义 (1)节点流:可以从或向一个特定的地方(节点)读写数据.如FileR ...

随机推荐

  1. MySQL 优化特定类型的查询

    优化COUNT()查询 COUNT() 是一个特殊的函数,有两种非常不同的作用: 统计某个列值的数量,也可以统计行数.在统计列值时要求列值是非空的(不统计NULL ).如果在COUNT() 的括号中指 ...

  2. RHCSA_DAY09

    常用特殊符号的使用 Linux系统下通配符起到了很大的作用,对于不确定的文档名称可以使用以下特殊字符表示 *常用的特殊符号,在文件名上,用来代表任意多个任意字符** ? 常用的特殊符号,在文件名上,用 ...

  3. 干了快3年Android了,感觉自己的职业生涯已经快凉了

    背景 首先我是个菜鸡,工资也低的一笔. 刚毕业时候在一家国企上班干 app 开发,干了快两年的时候,跳槽到了一家伪大厂干安全.投了不少简历都没有回音,只有这加伪大厂要我就来了.当时说好了会接触一些底层 ...

  4. Nacos 笔记

    Nacos 笔记 目录 Nacos 笔记 1. Nacos简介 1.1 主流配置中心对比 1.2 主流注册中心对比 1.3 Nacos特性 2. 安装启动 支持外部 MySQL 3. 配置管理 3.1 ...

  5. Mina的JMX支持

    以下是一个增加了JMX支持的Mina Echo Server. package org.apache.mina.echoServer; import java.lang.management.Mana ...

  6. SQL注入之MySQL报错注入整理

    看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...

  7. Oracle 数据库的导入与导出

    1.导入 打开cmd,用管理员登录:sqlplussys as sysdba密码不用输: 创建表空间:create tablespace tablespaceName datafile 'E:\tab ...

  8. C#/VB.NET 将PDF转为OFD

    OFD,全称Open Fixed-layout Document ,是一种可存储.读取以及编辑的国家标准版式的电子文档格式,属于中国的一种自主文件格式,在安全性上有可靠保证.为突破国外技术在我们软硬件 ...

  9. AQS源码分析看这一篇就够了

      好了,我们来开始今天的内容,首先我们来看下AQS是什么,全称是 AbstractQueuedSynchronizer 翻译过来就是[抽象队列同步]对吧.通过名字我们也能看出这是个抽象类 而且里面定 ...

  10. spring boot 整合JPA bean注入失败

    有时候报的错误让你匪夷所思,找错误得学会找根.源头在哪里? 比如:我们刚开始看的错误就是 org.springframework.beans.factory.UnsatisfiedDependency ...