IO
数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input
和输出output
,即流向内存是输入流,流出内存的输出流。
根据数据的流向分为:输入流和输出流
- 输入流 :把数据从
其他设备
上读取到内存
中的流。 - 输出流 :把数据从
内存
中写出到其他设备
上的流。
格局数据的(颗粒大小)类型分为:字节流和字符流
- 字节流 :以字节为单位,读写数据的流。
- 字符流 :以字符为单位,读写数据的流
字节输出流 OutputStream
java.io.FileOutputStream 类是文件输出流,用于将数据写出到文件。
写出字节:write(int b)
方法,每次可以写出一个字节数据,代码使用演示
package demo1;
import java.io.*;
public class FileDemo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("lqq.txt");
fileOutputStream.write(91);
fileOutputStream.write(97);
fileOutputStream.close();
}}
写出字节数组:write(byte[] b)
,每次可以写出数组中的数据,代码使用演示
public class FileDemo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("lqq.txt");
byte[] bytes = "陆圈圈".getBytes();
fileOutputStream.write(bytes);
fileOutputStream.close();
}}
写出指定长度字节数组:write(byte[] b, int off, int len)
,每次写出从off索引开始,len个字节,代码使用演示
public class FileDemo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("lqq.txt");
byte[] bytes = "abcd".getBytes();
// 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
fileOutputStream.write(bytes,2,2);
fileOutputStream.close();
}}
写出换行
public class FileDemo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("lqq.txt");
byte[] bytes = {97,98,99,100,101};
// 遍历数组
for (int i = 0; i < bytes.length; i++) {
// 写出一个字节
fileOutputStream.write(bytes[i]);
// 写出一个换行, 换行符号转成数组写出
fileOutputStream.write("\r\n".getBytes());
}
// 关闭资源
fileOutputStream.close();
}}
字节输入流InputStream
java.io.FileInputStream `类是文件输入流,从文件中读取字节。
读取字节:read
方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1
,代码使用演示
public class FileDemo1 {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("lqq.txt");
//byte[] bytes = new byte[2]; (定义字节数组,作为装字节数据的容器)
int len;
while((b=fileInputStream.read())!=-1){
System.out.println((char)b);
// 每次读取后,把数组的有效字节部分,变成字符串打印()
//System.out.println(new String(bytes,0,b));// b 每次读取的有效字节个数
}
}}
example:复制图片:
public class Copy {
public static void main(String[] args) throws IOException {
// 1.创建流对象
// 1.1 指定数据源
FileInputStream fis = new FileInputStream("D:\\test.jpg");
// 1.2 指定目的地
FileOutputStream fos = new FileOutputStream("test_copy.jpg");
// 2.读写数据
// 2.1 定义数组
byte[] b = new byte[1024];
// 2.2 定义长度
int len;
// 2.3 循环读取
while ((len = fis.read(b))!=-1) {
// 2.4 写出数据
fos.write(b, 0 , len);
}
// 3.关闭资源
fos.close();
fis.close();
}
}