Java IO流【概述】
一、Java IO(input、output)
输入与输出,IO是我们的程序与外界交换数据的方式。
Java提供了一种统一的标准的方式与外界交换数据。
Java将流按照功能划分为读和写,并用不同的方向来表示,输入和输出都是针对程序来说的,其中输入流(外界到程序的方向)用于读取数据,输出流(程序到外界的方向)用于写出数据。
Java将流划分为两大类:节点流、处理流
- 节点流:也称为低级流,是实际链接程序与数据源的"管道",负责实际搬运数据。读写一定是建立在节点流的基础上进行的。
- 处理流:也称为高级流,不能独立存在,必须链接在其他流上,目的是当数据流经当前流时对这些数据做某些处理,这样可以简化我们对数据的操作。
在实际应用中,我们是链接若干高级流,并最终链接低级流,通过低级流读写数据,通过高级流对读写的数据进行加工处理,完成一个复杂的读写操作。这个过程称为"流链接"。这也是学习IO的精髓所在。
二、文件流:
文件流是一对低级流,用于读写文件,就功能而言,它们与RandomAccessFile一致,但是底层的读写方式有本质区别。
RAF是基于指针进行随机读写的,可任意读写文件指定位置的数据,可以做到对文件部分数据的编辑操作。
流是顺序读写方式,所以不能做到任意读写指定位置的数据,对此也无法做到对文件数据进行编辑的操作,但是配合高级流可以更轻松的读写数据。
使用文件流向文件中写出字节:
1)FileOutputStream常用构造方法:FileOutputStream(String path)
、FileOutputStream(File file)
以上两种方式创建时,默认为覆盖写操作,即:若创建时发现该文件已存在,会先将该文件所有数据清除。然后将通过当前流写出的内容作为该文件的数据。
2)其他的构造方法:FileOutputStream(String path,boolean append)
、FileOutputStream(File file,boolean append)
追加写模式,即:若指定的文件存在,那么数据全保留,通过该流写出的数据会被追加到文件最后。
3)使用输出流写出数据:
注意:如果使用File的形式写出,默认是写在当前项目目录下的。
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("fos.txt",true);
String line ="啦啦啦啦";
byte[] data = line.getBytes("UTF-8");
fos.write(data);
System.out.println("写出完毕");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
fos.close();
}
}
4)使用输入流写入数据:
try {
FileInputStream fis = new FileInputStream("fos.txt");
byte[] data = new byte[200];
int len = fis.read(data);
System.out.println("实际读取了:"+len+"字节");
String str = new String(data,0,len,"UTF-8");
System.out.println(str);
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
5)使用文件流完成复制文件操作:
package io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FisCopy {
public static void main(String[] args) throws IOException {
File file = new File("fis.txt");
if(!file.exists()) {
file.createNewFile();
}
/*
* 使用文件输入流读取原文件
* 使用文件输出流复制文件写数据
*
* 利用块读写操作顺序从原文件将数据
* 读取出来写入复制文件完成复制操作
*
*/
FileOutputStream src = new FileOutputStream("fis.txt");
src.write("你好".getBytes("utf-8"));
FileInputStream fis = new FileInputStream("fis.txt");
FileOutputStream fos = new FileOutputStream("fis_cp.txt",true);
int len = -1;
byte[] data = new byte[1024*10];
while((len = fis.read(data)) != -1) {
System.out.println("len:"+len);
fos.write(data,0,len);
}
System.out.println("复制完毕");
src.close();
fis.close();
fos.close();
}
}
上一篇: 一、二维数组以及多维数组
下一篇: JAVA中的IO流