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. RHCE_DAY04

    sed流式编辑器 sed是一个非交互的文本编辑器,实现的功能跟vim相同,主要是对文件内容进行输出.删除.替换.复制.剪切.导入.导出等功能 命令格式1:前置命令 | sed [选项] '[指令]' ...

  2. 单机版搭建kubernetes(K8s)

    准备 云原生的概念越来越火,忍不住去看了看kubernetes,初次接触,晕晕乎乎的,于是不管三七二十一,先搭建个单机版的再说(没钱买服务器,目前也懒得装虚拟机),跑起来也算是第一步吧.网上教程一顿搜 ...

  3. 深入理解jvm-2Edition-Java内存区域

    1.运行时数据区域 Java虚拟机会将内存区域划分为几个区域,每个区域储存不同类型的数据或承担不同的功能. PC,堆-Java堆,栈-虚拟机栈.本地方法栈,方法区.直接内存. 当类被实例化或stati ...

  4. Vue实现点击按钮进行文件下载(后端Java)

    最近项目中需要实现点击按钮下载文件的需求,前端用的vue,因为文件是各种类型的,比如图片.pdf.word之类的.这里后端是可以返回文件的地址给前端的,但我看了下网上各种五花八门的答案,感觉都不是我想 ...

  5. DVWA(九):File Upload 全等级文件上传

    File Upload 文件上传,通常是由于对上传文件的类型没有进行严格的过滤.限制造成的,一般思路是 通过上传木马获取服务器的webshell(通过网络端口对网站服务器某种程度上的操作权限 也叫网站 ...

  6. 常见的六种容错机制:Fail-Over、Fail-Fast、Fail-Back、Fail-Safe,Forking 和 Broadcast

    目录 1.Fail-Over:故障转移 2.Fail-Fast:快速失败 3.Fail-Back:失效自动恢复 4.Fail-Safe:失效安全 5.Forking:并行调用多个服务 6.Broadc ...

  7. AlexNet论文总结

    论文链接:https://papers.nips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf Q1:解决了什么? 目前主 ...

  8. CycliBarriar和CountdownLatch(计数器)

    CyclicBarrier可以重复使用,而CountdownLatch不能重复使用. countDownLatch这个类使一个线程等待其他线程各自执行完毕再执行. 是通过一个计数器来实现的,计数器的初 ...

  9. JDBC基础篇(MYSQL)——自定义JDBCUtil工具类

    package util; import java.io.File; import java.io.InputStream; import java.sql.Connection; import ja ...

  10. rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台

    rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...