java-字节流-字符流
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-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- 理解Java中字符流与字节流
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...
- 理解Java中字符流与字节流的区别(转)
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...
- Java Io 字符流
Java Io 字符流包含: 1. InputStreamReader 它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite 它是char流到byt ...
- IO流(字节流,字符流,缓冲流)
一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流 这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图: 二:字符字节 ...
- Java IO: 字符流的Buffered和Filter
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.B ...
- Java IO: 字符流的Piped和CharArray
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader.Pip ...
- 理解Java中字符流与字节流的区别
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...
- Java中字符流与字节流的区别
字符流处理的单元为2个字节的Unicode字符,分别操作字符.字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组.所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单 ...
- Java:文件字符流和字节流的输入和输出
最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向: 输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...
随机推荐
- HTTP攻击与防范-PHP安全配置
实验目的 1.了解PHP攻击带来的危险性. 2.掌握PHP攻击的原理与方法 3.掌握防范攻击的方法 实验原理 由于网站服务器是以单一系统使用者的模式在运行,因此这个系统的使用者账号必须能够读取每个使用 ...
- 巧用 CSS 实现炫彩三角边框动画
最近有个小伙伴问我,在某个网站看到一个使用 SVG 实现的炫彩三角边框动画,问能否使用 CSS 实现: 很有意思的一个动画效果,立马让我想起了我在 CSS 奇思妙想边框动画 一文中介绍的边框动画,非常 ...
- shell脚本编写自动启动服务方法
shell脚本编写自动启动服务方法 前言 ln :创建连接文件 默认创建的是硬连接,好比复制 ,但是两个文件会同步命令:ln ./java/android/aa.txt aaa s :创建的是软连接变 ...
- Python:numpy.ma模块
翻译总结自:The numpy.ma module - NumPy v1.21 Manual 前言 ma是Mask的缩写,关于Mask的解释,如果有PS的基础,可以理解为蒙版,如果有计算机网络的基础, ...
- manjaro卸载与重装Arch linux
前言 之前安装了manjaro-deepin,但太久没用了,昨天更新系统后,出了点问题,重装个新版本吧. 卸载manjaro 由于之前安装了manjaro,默认开机引导程序是linux的Grub,那么 ...
- C#控制台输入密码星号显示
在Program类中的Main方法里: 1 public class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.Write ...
- Visual Studio双击打开项目而不是项目属性文件
从VS2019版本就默认勾选了这个,每次打开都是到属性文件,这个根本用不到,点击小三角又比较麻烦,不知道为啥微软给了这个默认功能 VS2022 Preview也是,默认勾选 勾选如下即可:
- 微信小程序知识点汇总
微信小程序常用标签与HTML的对应关系 <div></div> <view></view> <h1></h1>...<h6 ...
- Vue-表单验证-全选-反选-删除-批量删除
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- web Javascript360°全景实现
360 全景浏览是一种性价比很高的虚拟现实解决方案,给人一种全新的浏览体验,让你足不出户就能身临其境地感受到现场的环境.该技术被广泛地应用在房产.酒店.家居等领域. 下面我们使用三种方法讨论一个 36 ...