您的位置:首页 > 编程语言 > Java开发

java IO流文件的输入流具体实例解析(一)

2017-08-23 20:05 330 查看
这里是在网上找来的几个关于 IO流文件的输入流具体实例代码,接下来试着将其解析得更清楚明白一些,希望初学者看完能有所收获,这篇这个例子的代码是把文件上的字符一个个连续输出


方法/步骤

网上找来的实例

import java.io.*;

public class ReadFile

{

public static void readFileByChars(String fileName) {

File file = new File(fileName);

Reader reader = null;

        try { 

            reader = new InputStreamReader(new FileInputStream(file));

            int tempchar;

            

            while ((tempchar = reader.read()) != -1) {

            

                if (((char) tempchar) != '\r') {

                    System.out.print((char) tempchar);

                }

            }

            reader.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

   public static void main(String args[]) throws IOException

   {

  String path="D:\\f.txt";

  ReadFile rf=new ReadFile();

  rf.readFileByChars(path);

   }

}

同时在D盘根目录新建一个f.txt文件

内容为:

一二三四五六七八九十零

一二三四五六七八九十零

一二三四五六七八九十零

一二三四五六七八九十零

一二三四五六七八九十零

一二三四五六七八九十零

一二三四五六七八九十零

一二三四五六七八九十零一二三四五六七八九十零一二三四五六七八九十零









接下来我们用eclipse运行程序,运行成功并得到一下结果,读取是正常的





接着我们分析一下程序的一些语句,先从主函数main(String args[])看起

 String path="D:\\f.txt";

这句是定义一个字符变量存储文件的路径

 ReadFile rf=new ReadFile();

 ReadFile就是程序本身的主类,定义rf调用程序的函数

 rf.readFileByChars(path);

 readFileByChars就是程序定义的一个函数





接下来看函数readFileByChars(String fileName)

File file = new File(fileName);

Reader reader = null;

定义并初始化了读取文件需要的变量,File,Reader都是java的类,File类是文件对象,Reader类是所有字符输入的父类

 try catch (Exception e)

是当发生错误时捕捉错误的语句





reader = new InputStreamReader(new FileInputStream(file));

Reader类是所有字符输入的父类,

FileInputStream类就是把文件按照字节读入,

InputStreamReader类就是把读入的字节转化为字符,

语句的意思就是把文件按照字节读入后,再转成字符,再赋值给reader,

int tempchar;

定义一个整型变量,作为读取的字符的暂存变量





 while ((tempchar = reader.read()) != -1)

while是while循环,tempchar是读取的字符的暂存变量, reader.read()的表示读取文件一个字符,并返回这个字符的数值,read()读到文件没有字符可读时会返回-1

所以条件的意思是读取文件字符,并返回给tempchar,直到读到文件尾没有字符时,条件就为false结束循环





 if (((char) tempchar) != '\r') {

                    System.out.print((char) tempchar);

                }

if是条件判断,(char) 是强制类型转换为字符型,((char) tempchar)把字符的值转换为字符,'\r'是换行字符, System.out.print((char) tempchar);是输出字符

这个语句的意思是除开'\r'这个字符,其他字符都输出,

为什么要屏蔽'\r'呢?原因是windows文件换行结尾是\r\n这两字符,读取文件时也会一起读进来,如果这个两个字符一起输出或者连续输出是换一行,但如果分开不连续输出就是换两行,屏蔽'\r'是为为了避多出来的行

reader.close();

最后读完后把字符流关闭了

 e.printStackTrace();

是输出发生错误时错误





最后我试一下如果不写 if (((char) tempchar) != '\r')这个判断语句会怎么样,

结果是毫无变化,因为程序是一一个字符连续输出,\n\r不会出现分开不连续输出的情况,所以不会有变化。

当然可能在非windows编译环境会多出一行。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: