黑马程序员-IO流读取文件中的内容

 

 

 

 

IO读取文本文件中的内容

我们知道要读取一个文件中的内容,用到的是读取流,要读的是文本文件,所以就用字符流,这时 我们会想到读取字符流的抽象类Reader,我们已经敢确定了使用的是Reader,但是api中我们可以知道Reader是一个抽象类,我们要使用Reader类中的方法,就必须找到复写了Reader类中方法的Reader的子类,

因为我们是对文件进行操作,所以我们找到了一个对文件读取操作的子类FileReader。

找到了要使用的对象那么我们就创建以个文件读取流对象,并且指定和指定名称的文件相关联,保证该文件已经存在,若不存在将会出现FileNotFoundException异常信息。

 

 

import java.io.*;

class IO6

{

public static void main(String[] args)

{

FileReader fr=null;

try

{

fr=new FileReader("D://1.txt");

//创建一个FileReader类对象,指定要读取的文件。

int ch=0;

while((ch=fr.read()) != -1)

//使用Reader类中的read方法读取,read方法一次读取一个字节,且会自动往下读取。

//Read方法读取到文件最后时返回-1,可以以此来做为循环条件。

{

System.out.println((char) ch);

//将读取到的字符打印出来。

}

}

catch(IOException e)

{

throw new RuntimeException("读取失败");

}

finally

{

try

{

if(fr != null)

fr.close();

}

catch(IOException e)

{

throw new RuntimeException("关闭失败");

}

}

}

}

 

 

上面这种方法一次读取一个字节,然后存入一个字节,依次交替循环,可以把文本文件读取出来,但是我们需要的是原始的文本文件,不是一次一行只打印一个字符的文本,所以我们要想办法将文本全部按照原始格式打印出来。

那么我们就使用第二种方式来完成。

通过字符数组进行读取,然后将字符数组打印出来。

 

import java.io.*;

class IO6

{

public static void main(String[] args)

{

FileReader fr=null;

try

{

fr=new FileReader("E://Java//IO//src//IO6.java");

//创建一个FileReader类对象,指定要读取的文件。

char[] buf=new char[1024];

//创建一个字符数组,长度为1024的整数倍。

int num=0;

//定义一个变量存储数组中元素的个数,

while((num=fr.read(buf)) != -1)

//使用Reader类中的read方法读取,参数传入一个数组,将文本内容读取到数组中。

//Read方法读取到文件最后时返回-1,可以以此来做为循环条件。

{

System.out.println(new String(buf,0,num));

//将数组通过String的构造方法转换为字符串打印出来。

}

}

catch(IOException e)

{

throw new RuntimeException("读取失败");

}

finally

{

try

{

if(fr != null)

fr.close();

}

catch(IOException e)

{

throw new RuntimeException("关闭失败");

}

}

}

}