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. kali主机探测命令与工具集

    实验目的 熟悉ping.arping.fping.hping3.nbtscan.nping.p0f.xprobe2工具对目标主机的探测方法. 实验原理 目标识别工具发送特殊构造的数据包,根据返回的应答 ...

  2. 关于 Word2Vec 使用时遇到的一系列问题!!

    ​ 1  训练时 model = Word2Vec(x, size=250, window=5, min_count=5, workers=12, iter=10, sg=1) 这句代码一直报错 查了 ...

  3. Oracle之非关系数据库

    什么是非关系型数据库? 非关系型数据库它的全称是Not Only SQL(简称 NoSQL数据库)是用于存储和检索数据的非关系数据库系统.在当今世界,我们不应该只以没有预定义固定模式的表格式存储所有数 ...

  4. Anaconda:指令 安装、更新、卸载库

    学习总结自:如何使用anaconda安装或更新自己想要的库_xiexu911的博客-CSDN博客_anaconda 安装库 打开Anaconda Prompt后,输入指令及响应 conda list: ...

  5. Python:Excel

    xlrd与xlwt:xls文件 如果不想看前半部分的基础知识,可以直接看最后的总结部分 1.两个模块 读xlrd 写xlwt import xlrd,xlwt 2.读 2.1 文件.表格信息的获取 打 ...

  6. 【洛谷】P1447 能量采集

    此题虽为紫,但其实在水 能量采集 题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一 ...

  7. Flutter ChartSpace:通过跨端 Canvas 实现图表库

    基于Flutter 的图形语法库,通过跨端 Canvas ,将基于 Javascript 的图形语法库 ChartSpace 扩展至 Flutter 端 作者:字节跳动终端技术--胡珀 背景 数据平台 ...

  8. mysql命令flush privileges命令

    修改一个用户的密码,命令如下 mysql> update user set password=password('新密码') where user='用户名'; 执行后报错: ERROR 105 ...

  9. vue轻量进度条

    **### vue------ mode 好玩东西+1: 轻量级进度条: 1.引入 import NProgress from 'nprogress'; // progress bar import ...

  10. CF416E题解

    题意:对于所有的 \((u,v)\),询问有多少条边在这两个点的最短路边集之并内. 考虑对于每一个 \(u\) 建立最短路 DAG 图,问题变成询问唯一的度数为 \(0\) 的节点到所有节点路径的并集 ...