文件通过FileWriter这个对象创建成功,并成功往里写进了数据。
那么,如何读取数据?
文本文件的读取方式:
- 读取单个字符
首先,我们有一个txt文件,写入内容为"abcdefg",先看看单个字符的读取吧。
import java.io.*;
public class FileReaderDemo
{
public static void main(String[] args) throws IOException
{
//1.创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该文件已存在,若不存在则会发生异常
FileReader fr = new FileReader("demo.txt");
//2.调用读取流对象的read方法。
int ch=fr.read();
System.out.println("ch="+(char)ch);
fr.close();
}
}
这里,运行结果为:“ch=a”。
read();:一次读一个字符,并且会自动往下读。返回整数读取的字符,如果已到流的末尾,则返回-1。
如果要读出全部字符,可以多实现几次。当等于-1时停止循环。
即:
import java.io.*;
public class FileReaderDemo
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("demo.txt");
while(true)
{
int ch=fr.read();
if(ch==-1)
break;
System.out.println("ch="+(char)ch);
}
fr.close();
}
}
或:
import java.io.*;
public class FileReaderDemo
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("demo.txt");
int ch=0;
while((ch=fr.read())!=-1)
{
System.out.println("ch="+(char)ch);
}
fr.close();
}
}
- 读入数组
返回读取字符数,如果到达流的末尾,返回-1。
import java.io.*;
public class FileReaderDemo2
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("demo.txt");
//定义一个字符数组,用于存储读到字符。
char[] buf=new char [3];
//把流关联的数据读一个存到数组中
int num=fr.read(buf);
System.out.println("num="+num+"..."+new String(buf));
fr.close();
}
}
运行结果为:num=3…abc
原因:数组长度只有3,所以读到第三个之后就不再读了。
如果再加一个:
int num1=fr.read(buf);
System.out.println("num1="+num1+"..."+new String(buf));
则运行结果为:
num=3…abc
num1=3…def
如果再加一个:
int num2=fr.read(buf);
System.out.println("num2="+num2+"..."+new String(buf));
则运行结果变为了:
num=3…abc
num1=3…def
num2=1…gef
怎样避免这种情况呢?
应为:
import java.io.*;
public class FileReaderDemo2
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("demo.txt");
char[] buf=new char [3];
int num=0;
while((num=fr.read(buf))!=-1)
{
System.out.println(new String(buf,0,num)); //截取有效位
}
fr.close();
}
}
如果文件很大,那么一般数组的长度为1024的整数倍。