java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 Java IO 读取文件的实例详解的相关资料, 主要介绍字符流和字节流的内容,需要的朋友可以参考下
Java 中文件流的两个主要方式就是字符流和字节流,如下图:
具体的使用方法可以参考官方文档,这里主要介绍四种常见的文件读取方式
1. 通过字节来读取文件(常用于二进制文件:图片、声音、视频等)
2. 通过字符来读取文件(常用于文本的读取)
3. 通过行来读取文件(常用于面向行的格式化文本读取)
4. 随机读取文件(基于字节来读取)
下面是对于这四种读取方式的代码,如下:
- package com.ds.io;
- //1、按字节读取文件内容
- //2、按字符读取文件内容
- //3、按行读取文件内容
- //4、随机读取文件内容
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.RandomAccessFile;
- import java.io.Reader;
- publicclassReadFromFile{
- /**
- * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
- * @param fileName 文件的名
- */
- publicstaticvoid readFileByBytes(String fileName){
- File file =newFile(fileName);
- InputStreamin=null;
- try{
- System.out.println("以字节为单位读取文件内容,一次读多个字节:");
- // 一次读多个字节
- byte[] tempbytes =newbyte[100];
- int byteread =0;in=newFileInputStream(fileName);
- ReadFromFile.showAvailableBytes(in);
- // 读入多个字节到字节数组中,byteread为一次读入的字节数
- while((byteread =in.read(tempbytes))!=-1){
- System.out.write(tempbytes,0, byteread);
- }
- }catch(Exception e1){
- e1.printStackTrace();
- }finally{
- if(in!=null){
- try{in.close();
- }catch(IOException e1){}
- }
- }
- }
- /**
- * 以字符为单位读取文件,常用于读文本,数字等类型的文件
- * @param fileName 文件名
- */
- publicstaticvoid readFileByChars(String fileName){
- File file =newFile(fileName);
- Reader reader =null;
- try{
- System.out.println("以字符为单位读取文件内容,一次读多个字节:");
- // 一次读多个字符
- char[] tempchars =newchar[30];
- int charread =0;
- reader =newInputStreamReader(newFileInputStream(fileName));
- // 读入多个字符到字符数组中,charread为一次读取字符数
- while((charread = reader.read(tempchars))!=-1){
- // 对于windows下,rn这两个字符在一起时,表示一个换行。
- // 但如果这两个字符分开显示时,会换两次行。
- // 因此,屏蔽掉r,或者屏蔽n。否则,将会多出很多空行。
- if((charread == tempchars.length)&&(tempchars[tempchars.length -1]!='r')){
- System.out.print(tempchars);
- }else{
- for(int i =0; i < charread; i++){
- if(tempchars[i]=='r'){
- continue;
- }else{
- System.out.print(tempchars[i]);
- }
- }
- }
- }
- }catch(Exception e1){
- e1.printStackTrace();
- }finally{
- if(reader !=null){
- try{
- reader.close();
- }catch(IOException e1){}
- }
- }
- }
- /**
- * 以行为单位读取文件,常用于读面向行的格式化文件
- * @param fileName 文件名
- */
- publicstaticvoid readFileByLines(String fileName){
- File file =newFile(fileName);
- BufferedReader reader =null;
- try{
- System.out.println("以行为单位读取文件内容,一次读一整行:");
- reader =newBufferedReader(newFileReader(file));
- String tempString =null;
- int line =1;
- // 一次读入一行,直到读入null为文件结束
- while((tempString = reader.readLine())!=null){
- // 显示行号
- System.out.println("line "+ line +": "+ tempString);
- line++;
- }
- reader.close();
- }catch(IOException e){
- e.printStackTrace();
- }finally{
- if(reader !=null){
- try{
- reader.close();
- }catch(IOException e1){}
- }
- }
- }
- /**
- * 随机读取文件内容
- * @param fileName 文件名
- */
- publicstaticvoid readFileByRandomAccess(String fileName){
- RandomAccessFile randomFile =null;
- try{
- System.out.println("随机读取一段文件内容:");
- // 打开一个随机访问文件流,按只读方式
- randomFile =newRandomAccessFile(fileName,"r");
- // 文件长度,字节数
- long fileLength = randomFile.length();
- // 读文件的起始位置
- int beginIndex =(fileLength >4)?4:0;
- // 将读文件的开始位置移到beginIndex位置。
- randomFile.seek(beginIndex);//以字节数来设置偏移量
- byte[] bytes =newbyte[10];
- int byteread =0;
- // 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
- // 将一次读取的字节数赋给byteread
- while((byteread = randomFile.read(bytes))!=-1){
- System.out.write(bytes,0, byteread);
- }
- }catch(IOException e){
- e.printStackTrace();
- }finally{
- if(randomFile !=null){
- try{
- randomFile.close();
- }catch(IOException e1){}
- }
- }
- }
- /**
- * 显示输入流中还剩的字节数
- * @param in
- */
- privatestaticvoid showAvailableBytes(InputStreamin){
- try{
- System.out.println("当前字节输入流中的字节数为:"+in.available());
- }catch(IOException e){
- e.printStackTrace();
- }
- }
- publicstaticvoid main(String[] args){
- String fileName ="C:\\Users\\Administrator\\Desktop\\客户问题20160214.txt";
- ReadFromFile.readFileByBytes(fileName);
- ReadFromFile.readFileByChars(fileName);
- ReadFromFile.readFileByLines(fileName);
- ReadFromFile.readFileByRandomAccess(fileName);
- }
- }
以上就是 java IOl 流的操作,如有疑问可以留言或者到本站社区交流,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源: http://www.phperz.com/article/18/0103/356103.html