JavaIO系列——概述、字节流示例
流
什么是流
内存与存储设备之间传输数据的通道
输入流(按流向)
将存储设备中的内容读入到内存中
输出流(按流向)
将内存中的内容写入到存储设备中
字节流(按单位)
以字节为单位,可以读写多有数据
字符流(按单位)
以字符为单位,只能读写文本数据
节点流(按功能)
具有实际传输数据的读写功能
过滤流(按功能)
在节点流的基础之上增强功能
字节流(抽象类)
InputStream
输入流
常用方法
- available():返回此输入流下一个方法调用,可以不受阻塞地从输入流读取或跳过估计的字节数
- close():关闭输入流并释放资源
- mark(int readlimit):在此输入流中标记指定位置
- read():从输入流中读取数据的下一个字节
- read(btye[] b):读取一定数量的字节并将其存储在缓冲区数组b中,达到尾部返回-1
- reset():将此流重新定位到最后一次对此输入流调用mark方法的地方
- skip(long n):跳过并丢弃此输入流中数据的n个字节
OutputStream
输出流
常用方法
- flush():刷新此输出流并强制写出所有缓冲的输出字节
- close():关闭输出流并释放资源
- write(byte[] b):将b长度个字节从指定btye数组写入此输出流
- wirte(int b):写指定长度的字节
字节流(实现类)
FileInputStream
import java.io.FileInputStream;
import java.io.IOException;
public class demo3 {
public static void main(String[] args) throws IOException {
String path ="C:\\Users\\Syf200208161018\\Desktop\\学校服务器.txt";
FileInputStream fileInputStream = new FileInputStream(path);
//读取
byte[] bytes = new byte[1024];
int count = 0;
while ((count=fileInputStream.read(bytes))!=-1){
System.out.println(new String(bytes,0,count));
}
fileInputStream.close();
}
}
FileOutputStream
覆盖写:new FileOutputStream(path);
追加写:new FileOutputStream(path,true);
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class demo4 {
public static void main(String[] args) throws IOException {
//创建文件
String path = "C:\\Users\\Syf200208161018\\Desktop\\neww.txt";
FileOutputStream fileOutputStream = new FileOutputStream(path);
//写入
fileOutputStream.write(97);
fileOutputStream.write('b');
String str = "sadhkds撒低啊";
fileOutputStream.write(str.getBytes(StandardCharsets.UTF_8));
fileOutputStream.close();
}
}
使用字节流进行文件复制
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFile {
public static void main(String[] args) throws IOException {
String pathIn = "C:\\Users\\Syf200208161018\\Desktop\\软件.pdf";
String pathOut = "C:\\Users\\Syf200208161018\\Desktop\\copy.pdf";
//输入
FileInputStream fileInputStream = new FileInputStream(pathIn);
//输出
FileOutputStream fileOutputStream = new FileOutputStream(pathOut);
//读取后写入
byte[] bytes = new byte[1024];
int count = 0;
while ((count = fileInputStream.read(bytes))!=-1){
//确保输出不会溢出
fileOutputStream.write(bytes,0,count);
}
fileInputStream.close();
fileOutputStream.close();
}
}