黑马程序员-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("关闭失败");
}
}
}
}