java学习笔记之文本文件的读取方式

文件通过FileWriter这个对象创建成功,并成功往里写进了数据。
那么,如何读取数据?

文本文件的读取方式:

  1. 读取单个字符
    首先,我们有一个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. 读入数组
    返回读取字符数,如果到达流的末尾,返回-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的整数倍。

上一篇:java – R.raw.file的Android FileReader


下一篇:【u225】最优分解方案