本文主要给大家介绍java的InputStream 流的使用。
(1)FileInputstream: 子类,读取数据的通道
使用步骤:
1.获取目标文件:new File()
2.建立通道:new FileInputString()
3.读取数据:read()
4.释放资源:close()
1
2
3
4
|
1
2
3
4
5
6
7
8
9
10
11
|
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//分别调用方法查看效果
test1();
System.out.println( "-------------------------------------------" );
test2();
System.out.println( "-------------------------------------------" );
test3();
System.out.println( "-------------------------------------------" );
test4();
}
|
(2)读取数据的三种方式
1.直接读取 (一次只能一个字节)
1
2
|
int date = fileInputStream.read();
char date3 = ( char )fileInputStream.read();
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//方式一 直接打印
public static void test1() throws IOException{
//(1)获取目标文件路径
File file = new File( "C:\\Users\\joke\\Desktop\\Demo1.java" );
//(2)根据目标文件路径 建立通道: new FileInputStream(file)
FileInputStream fileInputStream = new FileInputStream(file);
//(3)读取数据 :read();
int date = fileInputStream.read(); //这里是int类型
int date2 = fileInputStream.read(); //
char date3 = ( char )fileInputStream.read(); //以char类型显示
System.out.println(date+ "\\" +date2+ "\\" +date3);
//(4)释放资源
fileInputStream.close();
}
|
2.单独使用for循环(效率低)
1
2
3
|
for ( int i = 0 ; i < file.length();i++){
System.out.print(( char )fileInputStream.read());
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//方式二 循环遍历
public static void test2() throws IOException{
//通过时间测试效率
long startTime = System.currentTimeMillis();
File file = new File( "C:\\Users\\joke\\Desktop\\Demo1.java" );
FileInputStream fileInputStream = new FileInputStream(file);
//for循环
for ( int i = 0 ; i < file.length();i++){
System.out.print(( char )fileInputStream.read());
}
fileInputStream.close();
long endTime = System.currentTimeMillis();
System.out.println( "读取文件所花时间:" +(endTime-startTime));
}
|
3.Byte[ ] 缓冲区(只能读取指定的字节数不能读取一个完整的文件)
1
2
3
|
byte [] bt = new byte [ 1024 ];
int count = fileInputStream.read(bt);
System.out.println( new String (bt, 0 ,count));
|
1
2
3
4
5
6
7
8
9
10
11
12
|
//方式三 创建缓冲区(只能读取制定的大小,不能读取一个完整的文件)
public static void test3() throws IOException{
File file = new File( "C:\\Users\\joke\\Desktop\\Demo1.java" );
FileInputStream fileInputStream = new FileInputStream(file);
//创建缓冲区,加快读取数据,确定要读取的字节大小
byte [] bt = new byte [ 1024 ];
//read() 读取字节
int count = fileInputStream.read(bt);
System.out.println(count); //显示读取到的字节数
System.out.println( new String (bt, 0 ,count)); //将字节转为字符串显示
fileInputStream.close();
}
|
4.缓冲区和循环结合。缓冲区一般设置为1024的倍数。理论上设置的缓冲区越大,读取效率越高
1
2
3
4
5
|
byte [] bt = new byte [ 1024 ];
int count = 0 ;
while ((count = fileInputStream.read(bt)) != - 1 ){
System.out.println( new String (bt, 0 ,count));
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//方式四 循环与缓冲区结合(效率高)
public static void test4() throws IOException{
//通过时间测试效率
long startTime = System.currentTimeMillis();
File file = new File( "C:\\Users\\joke\\Desktop\\Demo1.java" );
FileInputStream fileInputStream = new FileInputStream(file);
//缓冲区一般设置为1024的倍数。理论上设置的缓冲区越大,读取效率越高
byte [] bt = new byte [ 1024 ];
int count = 0 ;
//read返回 -1 时,证明已经遍历完
while ((count = fileInputStream.read(bt)) != - 1 ){
//字符串型显示(从bt中的第0个字节开始遍历count个长度)
System.out.println( new String (bt, 0 ,count));
}
fileInputStream.close();
long endTime = System.currentTimeMillis();
System.out.println( "读取文件所花时间:" +(endTime-startTime));
}
|
陌陌说:
在以上,对比第二个和第四个方法,会发现方法四的效率是比较高的,所以推荐使用的四个方法
在这里我们是直接抛出异常,除了抛出之外我们还可以使用
try{ }cater{ }finally{ }
的方式来处理异常
以上所述是小编给大家介绍的java IO流 之 输入流 InputString()的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/bigerf/archive/2016/12/06/6136557.html