InputStream和OutputStream流的使用
1.InputStream简介
java.io.InputStream是字节输入流的抽象类,表示字节输入流的所有类的顶层父类。用来将文件中的数据读取到java程序中。如果需要使用输入流的时候,必须创建他的子类进行使用。在读取文件的时候我们常常使用InputStream抽象类的子类FileInputStream文件字节输入流来进行文件中的数据读取,将磁盘中的文件转化为流的形式,读取到内存中来进行使用。
2.FileInputStream的使用
FileInputStream的构造方法有:FileInputStream(File file)参数是传递一个File类型的文件; FileInputStream(String name)参数是传递一个String类型的文件路径。
常用的方法有:
int read()是从文件中读取一个字节数的数据,并返回读取到的这个字节, 如果读取结束,则返回-1;
int read(byte[] b)是一次读取一个字节数组,输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数, 如果读取结束,则返回-1;
void close()是关闭流,如果不关闭流会造成内存溢出等情况,所以在使用结束后,需要手动调用关闭流的方法进行关闭。
3.FileInputStream读取文件
3.1 创建一个FileInputStream流对象,并指定需要读取的数据源文件,此时如果指定的数据源的文件不存在,则会抛出File not fount excep异常。
3.2 调用read()方法进行数据的读取。
3.3 把读取到的这个字节赋值给变量i,判断i是否不等于-1,如果不是-1表示没有读完,还在读,本次读取到了内容,就会继续再循环中对读取到的内容进行处理。
3.4 调用close()方法关闭流进行资源的释放。
第一种,一个字节一个字节的读取,这种方法不能读取中文,因为一个中文占多个字节,此时一次读取一个字节会把中文拆开读。
public class Test {
public static void main(String[] args) throws IOException {
FileInputStream stream = new FileInputStream("F:\\demo123\\test\\test.txt");
int i = 0;
while ((i = stream.read()) != -1) {
System.out.print((char) i);
}
stream.close();
}
}
第二种,使用字节输入流一次读取一个字节数组,输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数, 如果读取结束返回-1,这种会比上一种读取方式效率高很多。
public class Test1 {
public static void main(String[] args) throws IOException {
FileInputStream stream = new FileInputStream("F:\\test123\\test\\test.txt");
byte arr[]=new byte[1024];
int len = 0;//返回读取到的个数
//使用循环开始读取
while((len=stream.read(arr))!=-1){
System.out.println(new String(arr,0,len));
}
stream.close();
}
}
4.FileOutputStream输出流进行文件复制
FileOutputStream文件复制的流程是一边读,一边写,每读取一次就把读取到的内容写到文件中。和上面的一次读取一个字节数组的方式一样,也是采用这种方式进行复制的。
4.1 创建一个FileInputStream流对象,并指定需要读取的数据源文件,此时如果指定的数据源的文件不存在,则会抛出File not fount excep异常。
4.2 创建字节输出流对象用来写入,如果没有会进行自动创建。
4.3 创建一个数组用来读取
4.4 从文件中用字节数组读取数组,存储到字节数组中,每读取到一个内容,就把读取到的内容写入到目的地文件
public class Test2 {
public static void main(String[] args) throws IOException {
FileInputStream in= new FileInputStream("F:\\test123\\test\\test.txt");
FileOutputStream out = new FileOutputStream("F:\\test123\\test\\test1.txt");
byte arr[] = new byte[1024];
int len = 0;
while ((len = in.read(arr)) != -1) {
fs.write(arr,0,len);
}
in.close();
out.close();
}
}
以上就是InputStream和FileOutputStream的简单使用方法总结。
- 点赞
- 收藏
- 关注作者
评论(0)