- 字节流适合做一切文件数据的拷贝
FileInputStream(文件字节输入流)
- 作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。
每次读取一个字节
public static void main(String[] args) throws IOException {
//1.创建文件字节输入流管道,与源文件接通
// InputStream is = new FileInputStream(new File("src\\123"));
//简化写法
InputStream is = new FileInputStream("src\\123");
//2.开始读取文件的字节数据
//public int read():每次读取一个字节返回,如果没有数据,返回-1
int b1 = is.read();
System.out.println(b1);
int b2 = is.read();
System.out.println((char) b2);
int b3 = is.read();
System.out.println(b3);
//3.使用循环改造上述代码
int b;//记住读取的字节
while ((b = is.read()) != -1){
System.out.print((char) b);
}
每次读取多个字节
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("src\\123");
// byte[] buffer = new byte[3];
//2.开始读取文件的字节数据,每次读取多个字节
//public int read(byte b[]) throws IOException
//每次读取多个字节到字节数组中去,返回读取的字节数量,读取完毕返回-1
// int len = is.read(buffer);
// String rs = new String(buffer);
// System.out.println(rs);
// System.out.println("当次读取的字节数量:" + len);
//
// int len2 = is.read(buffer);
// String rs2 = new String(buffer,0,len2);
// System.out.println(rs2);
// System.out.println("当次读取的字节数量:" + len2);
//
// int len3 = is.read(buffer);
// System.out.println(len3);//-1
//3.使用循环改造
byte[] buffer = new byte[3];
int len; //记住读取了多少个字节
while ((len = is.read(buffer)) != -1){
//注意:读取多少,倒出多少
String rs = new String(buffer, 0, len);
System.out.println(rs);
}
//这种方案也不能避免读取汉字输出乱码的问题
is.close(); //关闭流
}
一次读取完全部字节
- 方式1
public static void main(String[] args) throws IOException {
FileInputStream is = new FileInputStream("src/123");
//准备一个字节数组,大小与文件的大小一样大
File f = new File("src/123");
long size = f.length();
byte[] buffer = new byte[(int) size];
int len = is.read(buffer);
System.out.println(new String(buffer));
System.out.println(size);
System.out.println(len);
}
- 方式2
byte[] buffer = is.readAllBytes();
System.out.println(new String(buffer));
FileOutputStream(文件字节输出流)
public static void main(String[] args) throws IOException {
//覆盖管道:覆盖之前的数据
// FileOutputStream os = new FileOutputStream("src/time/123.txt");
//追加数据的管道
FileOutputStream os = new FileOutputStream("src/time/123.txt",true);
//2.开始写字节数据出去
os.write(97);//97就是一个字节,代表a
os.write('b');//b也是一个字节
byte[] bytes = "我爱你abc".getBytes();
os.write(bytes);
os.write(bytes,0,9);
//换行符
os.write("\r\n".getBytes());
os.close();
}
案例:复制照片(适合一切文件的复制操作)
public static void main(String[] args) throws IOException {
//需求:复制照片
//1.创建一个字节输入流管道与源文件接通
FileInputStream is = new FileInputStream("D:\\pt\\123.jpg");
//2.创建一个字节输出流管道与目标文件接通
FileOutputStream os = new FileOutputStream("C:\\hhh\\123.jpg");
//3.创建一个字节数组,负责转移字节数据
byte[] buffer = new byte[1024];
//4.从字节输入流读取字节数据,写出去到字节输出流,读多少写出去多少
int len;//记住每次读取了多少个字节
while ((len = is.read(buffer)) != -1){
os.write(buffer,0,len);
}
is.close();
os.close();
}