Java知识点总结(JavaIO-字节流)
@(Java知识点总结)[Java, JavaIO]
[toc]
字节流
在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流。
字节流主要操作byte类型数据,以byte数组为准,主要操作类是 OutputStream 类和 InputStream 类。
输出写入数据,输入写出数据
字节输出流:OutputStream
是整个IO包字节输出流的最大父类,定义如下:
public abstract class OutputStream implements Closeable, Flushable
从定义可以发现:
OutputStream是一个抽象类,必须要通过子类实例化对象,才能使用。
可以使用子类FileOutputStream,向上转型后,操作一个文件。
字节输入流:InputStream
可以通过InputStream 从文件中把内容读取出来。
InputStream 类的定义如下:
public abstract class InputStream extends Object implements Closeable
同OutputStream 类一样,InputStream 本身也是一个抽象类,必须依靠其子类,如果从文件中读取,使用子类FileInputStream。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Demo03 {
// 将字符串转化为byte[]进行输出
public static void test1() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
OutputStream fos = new FileOutputStream(file);
String str = "Hello world!";
byte[] b = str.getBytes(); // 只能使用byte数组,所以将字符串转为byte数组
fos.write(b);
fos.close();
}
// 在文末追加新的内容,且一个字节一个字节的输出
public static void test2() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
OutputStream fos = new FileOutputStream(file, true);
String str = "\r\nHello world!";
byte[] b = str.getBytes(); // 只能使用byte数组,所以将字符串转为byte数组
for (int i = 0; i < b.length; i++) {
fos.write(b[i]);
}
fos.close();
}
// 读取数据
public static void test3() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
InputStream fis = new FileInputStream(file);
// byte[] b = new byte[1024]; //定义一个数组用来存放读取的数据
byte[] b = new byte[(int) file.length()]; // 根据文件的数据量,开辟指定大小的 byte 数组
int len = fis.read(b); // 读取内容到数组中
fis.close();
System.out.println("读取数据的长度" + len);
// System.out.println("内容为:"+new String(b));
System.out.println("内容为:" + new String(b, 0, len)); // 把 byte 数组转为字符串输出
}
// 使用循环,一个字节一个字节读取数据
public static void test4() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
InputStream fis = new FileInputStream(file);
byte[] b = new byte[(int) file.length()];
for (int i = 0; i < b.length; i++) {
b[i] = (byte) fis.read();
}
fis.close();
System.out.println("内容为:" + new String(b));
}
// 如果不知道要输入的内容有多大,则使用是否读到文件末尾的方式来读取文件
public static void test5() throws IOException {
File file = new File("E:" + File.separator + "test.txt");
InputStream fis = new FileInputStream(file);
int len = 0; //用于记录读取数据的个数
byte[] b = new byte[1024];
int temp = 0; //接收读取的每一个内容
while((temp = fis.read()) != -1){
b[len] = (byte) temp;
len ++;
}
fis.close();
System.out.println("内容为:" + new String(b,0,len));
}
public static void main(String[] args) {
try {
test1();
test2();
test5();
} catch (IOException e) {
e.printStackTrace();
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。