本篇可以号称是市面最全面的InputStream的用法详解 ,如下所示
在java中InputStream是字节输入流 ,用来将文件中的数据读取到java程序中 。
InputStream是所有字节输入流的顶层父类 ,是一个抽象类 。如果要用 ,需要使用子类。
最常用的子类:FileInputStream 。
构造方法:
FileInputStream(File file): 传递一个File类型的文件FileInputStream(String name): 传递一个String类型的文件路径
其他方法:
int read(): 从文件中读取一个字节数的数据 。并返回读取到的这个字节 。 如果读取结束 ,返回的是-1.
int read(byte[] b): 一次读取一个字节数组 ,输入流会把读取到的内容放入到这个字节数组中 ,并返回读取到的个数 , 如果读取结束返回-1.
void close()
使用步骤:
1. 创建一个FileInputStream流对象 ,绑定一个数据源文件 。
2. 调用read方法读取数据 。
3. 释放资源
注意: 这种方式不能读取中文,一个中文占多个字节 ,此时一次读取一个字节会把中文拆开读 。
*/
使用字节输入流一次读取一个字节数组 。
int read(byte[] b): 一次读取一个字节数组 ,
输入流会把读取到的内容放入到这个字节数组中,并返回读取到的个数 , 如果读取结束返回-1.
这种读取方式效率高
*/
public class Demo02InputStream {
public static void main(String[] args) throws IOException {
//创建Fileinptstream 流对象 ,并绑定源文件
FileInputStream fis=new FileInputStream("E:\\Test\\java265.txt");
//调用read方法读取数据.
// // int read(byte[] b): 一次读取一个字节数组
// 会将数据读取到字节数组里面 。 字节数组长度是几,那么就最多一次读取几个 。 并
// 且返回读取到的个数 ,读取结束 ,返回-1
//
// //使用循环 ,一次读取一个字节数组
// //定义一个字节数组 ,用来保存读取到的数据。
byte arr[]=new byte[3];
//定义一个变量来保存读到的个数
int len;//返回读取到的个数
//使用循环开始读取
while((len=fis.read(arr))!=-1){
/*
上面条件作了下面的事情:
1. 通过字节输入流fis调用read方法 ,将数据读取到Arr这个字节数组中
2. 将读取到的有效个数返回 ,赋值给len 。
3. 判断len是否不等于-1 ,如果不等于-1 ,表示读取到了内容 ,就就在循环中进行处理.
读取出来的数组在bArr数组中放着
*/
//最后一次读取可能会有上次残留的数据,所以不能把字节数组的整体都转成String
//System.out.println(new String(bArr));
//读取到了几个内容 ,就把字节数组的几个元素转成字符串 ,并且打印
System.out.println(new String(arr,0,len));
}
}
}
文件复制 。
文件复制其实就是一边读,一边写 ,每读取一次就把读取到的内容写到文件中。
为了保证复制效率 ,我们采用一次读取一个字节数组的方式进行复制
思路:
1. 创建字节输入流对象,用来读取
2. 创建字节输出流对象 ,用来写入 。
3. 开始读取 ,一次读取一个字节数组 。
4. 把读取到的字节数组的内容写入到目的地文件
5. 循环 第3步 和 第4步
6. 释放资源
*/
public class FileCopy {
public static void main(String[] args) throws IOException {
//1. 创建字节输入流对象 ,用来读取
FileInputStream fis = new FileInputStream("E:\\test\\java265.jpg");
//2创建字节输出流对象 ,用来写入//没有会创建
FileOutputStream fs = new FileOutputStream("java25.com");
//3创建一个数组用来读取
byte arr[] = new byte[1024 * 8];
int len;//用来计数
while ((len = fis.read(arr)) != -1) {
//从文件中用字节数组读取数组 ,存储到字节数组中
// 每读取到一个内容 ,就把读取到的内容写入到目的地文件
fs.write(arr,0,len);
}
//释放资源
fs.close();
fis.close();
}
}
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布。任何个人或组织 ,在未征得本站同意时,禁止复制 、盗用 、采集、发布本站内容到任何网站 、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。