Java文件读操作(两种read方法)
来源:互联网 发布:淘宝香港地址怎么填写 编辑:程序博客网 时间:2024/06/06 17:08
将文件中的数据读入程序,是将程序外部的数据传入程序中,应该使用输入流——InputStream或Reader。而由于读取的是特定的数据源——文件,则可以使用输入对应的子类FileInputStream或FileReader实现。
在实际书写代码时,需要首先熟悉读取文件在程序中实现的过程。在Java语言的IO编程中,读取文件是分两个步骤:
1、将文件中的数据转换为流(由系统完成,只需要创建对应的流对象即可);
2、读取流内部的数据(第二个步骤使用输入流对象中的read方法即可实现);
使用输入流进行编程时,代码一般分为3个部分:
1、创建流对象,
2、读取流对象内部的数据,
3、关闭流对象。
下面以读取文件的代码示例:
import java.io.*;/** * 使用FileInputStream读取文件 */public class ReadFile1 { public static void main(String[] args) { //声明流对象 FileInputStream fis = null; try{ //创建流对象 fis = new FileInputStream("e:\\a.txt"); //读取数据,并将读取到的数据存储到数组中 byte[] data = new byte[1024]; //当前下标 int i = 0; //读取流中的第一个字节数据,一次读一个字节 int n = fis.read(); //依次读取后续的数据 //未到达流的末尾 while(n != -1){ //将有效数据存储到数组中,将已经读取到的数据n强制转换为byte,即取n中的有效数据——最后一个字节 data[i] = (byte)n; //下标增加 i++; //读取下一个字节的数据 n = fis.read(); } //解析数据 String s = new String(data,0,i); //输出字符串 System.out.println(s); }catch(Exception e){ e.printStackTrace(); }finally{ try{ //关闭流,释放资源 fis.close(); }catch(Exception e){} } }}
在该示例代码中,首先创建一个FileInputStream类型的对象fis:
fis = new FileInputStream("e:\\a.txt");
这样建立了一个连接到数据源e:\a.txt的流,并将该数据源中的数据转换为流对象fis,以后程序读取数据源中的数据,只需要从流对象fis中读取即可。
读取流fis中的数据,需要使用read方法,该方法是从InputStream类中继承过来的方法,该方法的作用是每次读取流中的一个字节,如果需要读取流中的所有数据,需要使用循环读取,当到达流的末尾时,read方法的返回值是
int n = fis.read();
将读取的值赋值给int值n,如果流fis为空,则n的值是-1,否则n中的最后一个字节包含的时流fis中的第一个字节,该字节被读取以后,将被从流fis中删除。环读取流中的其它数据,如果读取到的数据不是-1,则将已经读取到的数据n强制转换为byte,即取n中的有效数据——最后一个字节,并存储到数组data中,然后调用流对象fis中的read方法继续读取流中的下一个字节的数据。一直这样循环下去,直到读取到的数据是-1,也就是读取到流的末尾则循环结束。
这里的数组长度是1024,所以要求流中的数据长度不能超过1024,所以该示例代码在这里具有一定的局限性。如果流的数据个数比较多,则可以将1024扩大到合适的个数即可。
上面详细介绍了读取文件的过程,其实在实际读取流数据时,还可以使用其它的read方法,下面的示例代码是使用另外一个read方法实现读取的代码:
import java.io.FileInputStream;/** * 使用FileInputStream读取文件 */public class ReadFile2 { public static void main(String[] args) { //声明流对象 FileInputStream fis = null; try{ //创建流对象 fis = new FileInputStream("e:\\a.txt"); //读取数据,并将读取到的数据存储到数组中 byte[] data = new byte[1024]; //数据存储的数组 int i = fis.read(data);//对比上面代码中的 int n = fis.read();读取第一个字节的数据返回到n中 //解析数据 String s = new String(data,0,i); //输出字符串 System.out.println(s); }catch(Exception e){ e.printStackTrace(); }finally{ try{ //关闭流,释放资源 fis.close(); }catch(Exception e){} } }}
该示例代码中,只使用一行代码:
int i = fis.read(data);
就实现了将流对象fis中的数据读取到字节数组data中。该行代码的作用是将fis流中的数据读取出来,并依次存储到数组data中,返回值为实际读取的有效数据的个数。
使用该中方式在进行读取时,可以简化读取的代码。
拓展:
读取文本文件时:使用Reader类的子类FileReader进行实现,在编写代码时,只需要将上面示例代码中的byte数组替换成char数组即可。
读取二进制文件或自定义格式的文件时:使用FileInputStream进行读取,方便对于读取到的数据进行解析和操作。
- Java文件读操作(两种read方法)
- Java-文件操作|read|write
- read方法读文件
- 文件流操作两种方法比较
- [Java]文件读写的两种方法
- java 读取资源文件两种方法
- Java读写文件的两种方法
- 两种方法实现Java读写文件
- 操作卡片文件命令--读记录(READ RECORD)
- [Java]Java实现线程操作的两种方法
- 单个字符转ASCII码的两种方法(不涉及文件操作)
- Java操作Excel文件的两种Jar包选择
- java使用JexcelApi和POI两种方法操作excel
- Java操作文件方法
- JAVA写文件到FTP的两种方法
- java中获得文件流的两种方法
- 获取Java文件路径的两种方法
- JAVA读取XML文件的两种方法
- quick 3.2 android 返回键功能
- 【HTML5】——音视频处理
- Jibx 结合 ant使用的一些心得
- NOIP初赛模拟赛总结
- A query was run and no Result Maps were found for the Mapped Statement
- Java文件读操作(两种read方法)
- pdf转CAD怎么转方便
- Java设计模式_(行为型)_命令模式
- Java 发送邮件 传入收件邮箱和邮件内容,返回发送状态
- 数字三角形问题
- Perl 正则式应用
- 乐观锁与悲观锁(并发控制)
- 通信相关优质博客link
- zookeeper服务器启动过程