字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:
设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。
InputStream
是所有的输入字节流的父类,它是一个抽象类。ByteArrayInputStream
、StringBufferInputStream
、FileInputStream
是三种基本的介质流,它们分别从Byte 数组
、StringBuffer
、和本地文件
中读取数据。PipedInputStream
是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。ObjectInputStream
和所有FilterInputStream
的子类都是装饰流(装饰器模式的主角)。构造方法
FileInputStream(File)
FileInputStream(String filename)
常用方法
read
:读取一个字节,返回该字节的值,如果到达文件的末尾,则返回-1。需要注意:read()方法和迭代器一样,会自动下移的
read(byte[ ])
从输入流中读取至多一个数组长度的内容,到达文件末尾,则返回-1。
在项目根目录新建一个123.txt
,填入kenvie
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class demo {
public static void main(String[] args) throws IOException{
File file = new File("123.txt");
FileInputStream fis = new FileInputStream(file);
int result;
while((result = fis.read())!= -1) {
System.out.print(result+"\t");
}
}
}
运行结果:
打印的是kenvie每个字母对应的Ascii码
image.png
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class demo {
public static void main(String[] args) throws IOException{
File file = new File("123.txt");
FileInputStream fis = new FileInputStream(file);
byte[] bt = new byte[1024];
int num;
while((num=fis.read(bt))!=-1) {
String string = new String(bt,0,num);
System.out.println(string);
}
}
}
运行结果:
image.png
OutputStream
是所有的输出字节流的父类,它是一个抽象类。ByteArrayOutputStream
、FileOutputStream
是两种基本的介质流,它们分别向Byte 数组
、和本地文件
中写入数据。PipedOutputStream
是向与其它线程共用的管道中写入数据。ObjectOutputStream
和所有FilterOutputStream
的子类都是装饰流。构造方法:
FileOutputStream(File file)
/ FileOutputStream(String name)
注意:如果父目录不存在,会报FileNotFoundException异常,如果父目录存在,会创建一个新的文件,如果此时已经有文件存在,会覆盖原文件
FileOutputStream(File file,boolean flag)
/ FileOutputStream(String name,boolean flag)
注意:如果当前文件需要从文件末尾进行插入(接着文件里的内容继续写),必须将第二个参数设置为true,默认不写为false,会覆盖原文件
常用方法:
write(int)
向文件中写入一个字节的值
write(byte[])
向文件中写入一个数组的数据。
write(byte[] offset len)
将 偏移量为 offset 的索引位置的长度为 len 的数据,写入到输出流中。
1、会在项目根目录新建一个1234.txt
文件,往文件中输入kenvie.com
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class demo {
public static void main(String[] args) throws IOException {
File file=new File("1234.txt");
FileOutputStream fos=new FileOutputStream(file);
fos.write("kenvie.com".getBytes());
}
}
2、将1.txt
的内容复制到2.txt
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class demo {
public static void main(String[] args) throws IOException {
File file = new File("1.txt");
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(new File("2.txt"));
byte[] bt = new byte[1024];
int num;
while((num = fis.read(bt))!=-1) {
fos.write(bt,0,num);
}
fis.close();
fos.close();
}
}
版权属于:kenvie
本文链接:https://cloud.tencent.com/developer/article/1937657
商业转载请联系作者获得授权,非商业转载请注明出处。