I/O叙述

FileOutputStream类字节输出流的介绍:

写入数据的原理

    java程序-->JVM(java虚拟机)--->OS(操作系统)----》OS调用写数据的方法---》把数据写入到文件钟

字节输出的使用步骤:

11创建一个FileOutputStream 对象,构造方法钟传递写入数据的目的地

22调用FileOutputStream对象中的方法write把数据写入到文件中

33释放资源,因为流使用会占用一定的内存,使用完毕要把内存情况,提高程序的效率

public class Demo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("C:\\Users\\quan\\Desktop\\untitled1\\src\\fs.txt");
fos.write(97);
fos.close(); }
}

一次写多个字节

public class Demo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("C:\\Users\\quan\\Desktop\\untitled1\\src\\bfs.txt");
fos.write(49);
fos.write(48);
fos.write(48);
//100
byte[] bytes = {65,66,57,59};
fos.write(bytes); byte[] bytes1 = {-65,-66,57,59};
fos.write(bytes1);
fos.close();//100AB9;烤9; }
}

字符数组的一部分写入文件

public class Demo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("C:\\Users\\quan\\Desktop\\untitled1\\src\\cfs.txt");
byte[] bytes1 = {65,66,57,59};
fos.write(bytes1,1,2);
fos.close();
//B9
}
}

写入字符串,利用字符串方法转换为字节

public class Demo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("C:\\Users\\quan\\Desktop\\untitled1\\src\\cfs.txt");
byte[] bytes = "halo".getBytes();
fos.write(bytes);
fos.close();
//文件:halo
}
}

数据追加写入

public class Demo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("C:\\Users\\quan\\Desktop\\untitled1\\src\\cfs.txt",true);
byte[] bytes = "halo".getBytes();
fos.write(bytes);
fos.close();
//文件:halohalo
}
}

换行

public class Demo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("C:\\Users\\quan\\Desktop\\untitled1\\src\\cfs.txt",true);
byte[] bytes = "halo".getBytes();
for (int i =1;i<=10;i++){
fos.write(bytes);
fos.write("\r\n".getBytes());
} fos.close();
//文件:halohalo
}
}
/*
halohalohalo
halo
halo
halo
halo
halo
halo
halo
halo
halo */

FileInputStream类字节输入流的介绍:

public class Demo1 {
public static void main(String[] args) throws IOException {
FileInputStream fos = new FileInputStream("C:\\Users\\quan\\Desktop\\untitled1\\src\\cfs.txt");
int i = fos.read();
System.out.println(i); int i2 = fos.read();
System.out.println(i2);
fos.close();
}
}
/*
104
97
*/

循环文件

public class Demo1 {
public static void main(String[] args) throws IOException {
FileInputStream fos = new FileInputStream("C:\\Users\\quan\\Desktop\\untitled1\\src\\cfs.txt");
//循环读取:
int len =0;
//因为读到没有数据的时候,自动返回-1
while ((len = fos.read())!= -1){
System.out.print(len);
System.out.println((char)len);
}
}
}
/*
104h
97a
108l
111o
13
10 104h
97a
108l
111o
13
10
*/

读取文件的原理

字节输入流一次多字节

方法参数byte[]作用就是存储每次读取到的多个字节

数组的长度一班定义为1024或者他的整数倍

方法的返回参数int是  每次读取到的所有有效字节个数

public class Demo1 {
public static void main(String[] args) throws IOException {
FileInputStream fos = new FileInputStream("C:\\Users\\quan\\Desktop\\untitled1\\src\\cfs.txt");
byte[] bytes = new byte[3];
int len = fos.read(bytes);
System.out.println(len);
System.out.println(Arrays.toString(bytes));
System.out.println(bytes);
System.out.println(new String(bytes));//直接转为字符串
fos.close();
}
}
/*
3
[104, 97, 108]
[B@1b6d3586
hal
Arrays.toString()的作用是用来很方便地输出数组,
而不用一个一个地输出数组中的元素。 */

字符流

当使用字节流读取文本的时候,可能会有一个小问题,就是遇到中文字符时,可能不会显示完整的字符。

是因为一个中午字符可能占用多个字节存储,所以提供了一些字符流类,以字符为单位读写数据,专门处理文本文件

/*
使用字节流读取中文文件
1个中文
GBK:占用两个字符
UTF-8占用3个字符
*/ import java.io.FileInputStream;
import java.io.IOException; public class Demo11 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("C:\\Users\\quan\\Desktop\\练习\\src\\code\\haotusay");
int len = 0;
while ((len = fis.read()) != -1){
System.out.println(len);
}
fis.close();
}
}

/*
字符输入流的使用步骤:
创建FileReader 对象,构造方法钟绑定要读取的数据源
使用FileReader对象钟的方法read读取文件夹
释放资源
*/
public class Demo11 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("C:\\Users\\quan\\Desktop\\练习\\src\\code\\haotusay");
// int len = 0;
// while ((len = fr.read()) != -1){
// System.out.print((char)len);
// }//结果:全植强45
char[] cs = new char[1024];//存储读取到的多个字符
int len = 0;
while ((len = fr.read(cs)) != -1){
System.out.println(len);
System.out.println(new String(cs,0,len));//因为到尾部的时候的值就为-1
} fr.close();
}
}

字符输出流

/*
字符输出流的使用步骤
创建FileWriter 对象,构造方法钟绑定要写入数据的目的地
使用Filewriter方法writer,把数据写入到内存缓冲区钟(字符转换为字节的过程)
使用FIlewriter方法flush,把内存缓冲区钟的数据,刷新到文件中
释放资源-会先把内存缓冲区中的数据刷新到文件中
*/

写入单个字符

public class Demo11 {
public static void main(String[] args) throws IOException {
FileWriter fr = new FileWriter("C:\\Users\\quan\\Desktop\\练习\\src\\code\\haotusay");
fr.write(98);//直接替换文件内容
fr.flush();//同一次的写入追加写入
fr.close(); } }
     /*
flush:刷新缓冲区,流对象可以继续使用
close:先刷新缓冲区,然后通知系统释放资源。流对象不可以在被使用
*/

写入的其他方法

public class Demo11 {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("C:\\Users\\quan\\Desktop\\练习\\src\\code\\haotusay");
char[] cs = {'a','v','c','d'};
fw.write(cs);
fw.write(cs,1,3);
fw.write(" quanzhiqiang ");
fw.write("货拉拉拉拉",1,3);
fw.close();
//avcdvcd quanzhiqiang 拉拉拉
}
}

续写和换行

public class Demo11 {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("C:\\Users\\quan\\Desktop\\练习\\src\\code\\haotusay",true);
// for (int i = 0;i<10 ;i++){
// fw.write("qq" + i);
// }//QQqq0qq1qq2qq3qq4qq5qq6qq7qq8qq9 for (int i = 0;i<10 ;i++){
fw.write("qq" + i+"\n");
}
/*
QQqq0qq1qq2qq3qq4qq5qq6qq7qq8qq9qq0
qq1
qq2
qq3
qq4
qq5
qq6
qq7
qq8
qq9
*/
fw.close();
}
}

java-字节流-字符流的更多相关文章

  1. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流

      File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...

  2. 理解Java中字符流与字节流

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...

  3. 理解Java中字符流与字节流的区别(转)

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

  4. Java Io 字符流

    Java Io 字符流包含: 1. InputStreamReader  它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite  它是char流到byt ...

  5. IO流(字节流,字符流,缓冲流)

    一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流   这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图:   二:字符字节 ...

  6. Java IO: 字符流的Buffered和Filter

    作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.B ...

  7. Java IO: 字符流的Piped和CharArray

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader.Pip ...

  8. 理解Java中字符流与字节流的区别

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

  9. Java中字符流与字节流的区别

    字符流处理的单元为2个字节的Unicode字符,分别操作字符.字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组.所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单 ...

  10. Java:文件字符流和字节流的输入和输出

    最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向:     输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...

随机推荐

  1. Renix绑定流详解——网络测试仪实操

    一.测试环境 使用测试仪模拟两台主机直接发流,中间有路由器.如下图,测试仪port1端口模拟的主机IP为10.1.1.2,port2端口模拟的主机IP为10.2.1.2 二.预约测试资源 打开Reni ...

  2. 【C#IO 操作】stream 字节流|字符流 |比特流

    stream的简介 Stream 所有流的抽象基类. 流是字节序列的抽象,例如文件.输入/输出设备.进程中通信管道或 TCP/IP 套接字. Stream类及其派生类提供这些不同类型的输入和输出的一般 ...

  3. [炼丹术]DeepLabv3+训练模型学习总结

    DeepLabv3+训练模型学习总结 一.DeepLabs3+介绍 DeepLabv3是一种语义分割架构,它在DeepLabv2的基础上进行了一些修改.为了处理在多个尺度上分割对象的问题,设计了在级联 ...

  4. Qt:QJsonArray

    0.说明 QJsonArray中存储了一系列的QJsonValue.可以向其中插入.删除QJsonValue. 一个QJsonArray可以与QVariantList互相转换.可以通过size()访问 ...

  5. 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2

    基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2 Kubernetes实现Master-Slave分布式构建方案 传统Jenkins的Master-Slave方案的缺陷 Mas ...

  6. Scipy和Numpy的插值对比

    技术背景 插值法在图像处理和信号处理.科学计算等领域中是非常常用的一项技术.不同的插值函数,可以根据给定的数据点构造出来一系列的分段函数.这一点有别于函数拟合,函数拟合一般是指用一个给定形式的连续函数 ...

  7. 分享自研实现的多数据源(支持同DB不同表、跨DB表、内存数据、外部系统数据等)分页查询工具类实现原理及使用

    思考: 提起分页查询,想必任何一个开发人员(不论是新手还是老手)都能快速编码实现,实现原理再简单不过,无非就是写一条SELECT查询的SQL语句,ORDER BY分页排序的字段, 再结合limit ( ...

  8. netty通信

    学习netty之前,要先了解操作系统中的IO.零拷贝(已经附上链接了) 一.netty的简单介绍 Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目. Ne ...

  9. CentOS8安装Geant4笔记(三):Geant4介绍、编译、安装支持Qt5界面并运行exampleB1例程显示Qt界面

    前言   上一篇,安装了Qt5环境.  本篇在服务器CentOs8.2上安装geant4软件,geant4使用Qt5来显示.   GEANT4 介绍   Geant4 是一个用于模拟粒子穿过物质的工具 ...

  10. 1.2 简单的STL案例

    文章目录 1.容器算法迭代器分离案例 2.专栏回顾:第一章到第二章2.2 1.容器算法迭代器分离案例 案例:统计某个元素在数组里出现的次数 简易版(帮助理解,无STL) #include<ios ...