除了最基本的字符流外,还有其它类,如CharArrayReader,CharArrayWriter,StringReader,StringWriter,PrintWriter,PushbackReader等,这些字符流的详细使用说明可以参考JavaAPI文档
一般的,名称以Reader结尾的类都是字符输入流,其大部分读取数据的方法都来自Reader类,名称以Writer结尾的类都是字符输出流,其大部分写数据的方法都来自Writer类,名称以Stream结尾的类一般都是字节流。
PrintWriter用于向字符(文本)输出流打印对象的格式化表示形式
Scanner是一个可以使用正则表达式来解析字符串的简单文本扫描器。Scanner使用分隔符模式将其输入分解为标记,在默认情况下该分隔符模式与空白匹配。然后可以使用不同的next()方法将得到的标记转换为不同类型的值,在读取下一个标记之前可以使用hasNext()方法检测下。
基本思路是先用Scanner类和文件字符输入流读取文件中的每一行,再用Scanner扫描解析每一行,得到需要的数据。
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Scanner;
public class ScannerPrintWriterDemo {
public static void main(String[] args) {
Scanner s=null;
PrintWriter pw=null;
try{
s=new Scanner(new FileReader("source.txt"));
pw=new PrintWriter("dest.txt");
while(s.hasNextLine())
{
String strLine=s.nextLine();
int sum=getLineSum(strLine);
pw.println(strLine +"\t"+sum);
}
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}finally
{
if(s!=null)
s.close();
if(pw!=null)
pw.close();
}
}
private static int getLineSum(String strLine)
{
Scanner s=new Scanner(strLine);
int sum=0;
while(s.hasNextInt())
{
sum+=s.nextInt();
}
return sum;
}
}
提示:Scanner不仅可以读取解析输入流的内容,还可以扫描解析字符串,转换成用户需要的数据。