package charreadandwrite;
import java.io.*;
//从磁盘上读取一个文本文件(如某个java源代码),分别统计出文件中英文字母、空格、数字字符的个数。(注意文本文件中的数字指的是数字字符!!!)
public class CharDataRWTest {
public static void main(String args[]) throws IOException {
// 测试字符输入流Reader的read方法
FileInputStream rea = new FileInputStream("test.txt");
// public InputStreamReader(InputStream in)
Reader reader = new InputStreamReader(rea);
char[] cbuf = new char[1024];
int readChar,numNum=0,numSpace=0,numWord=0;
while ((readChar = rea.read()) != -1) {
char c = (char) readChar;
if((c>='a'&&c<='z')||(c>='A')&&(c<='Z')) numWord++;
if(c>='0'&&c<'9') numNum++;
if(c == ' ') numSpace++;
System.out.println("该字符是:"+c);
}
System.out.println("最后的统计结果是:英文字母有"+numWord+"个;空格有"+numSpace+"个;数字字符有"+numNum+"个");
//关闭流并释放资源
reader.close();
}
}
package charreadandwrite;
import java.io.*;
//在一个磁盘的文件里保存26个英文小写字母(乱序),将他们读入内存中,进行排序,把排好顺序的数再重新追加写到磁盘的该文件中。
//因为要多次读写,用缓冲流
//排序用一个int表做映射,写的时候再将int转为char
public class CharRWTest02 {
public static void main(String args[]) throws IOException {
Reader re= new BufferedReader(new InputStreamReader(
new FileInputStream("test.txt")));
char [] buf = new char[1024];
int len;
len=re.read(buf);//一次读入全部的数据
int [] map = new int[30];
for(int i=0;i<len;i++){
System.out.print(((int)(buf[i]-'a'))+" ");
map[(int)(buf[i]-'a')]++;
}
System.out.println();
Writer wr = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("test.txt",true)));
wr.write("\r\n");
for(int i=0;i<30;i++){
if(map[i]>0){
while(map[i]>0){
map[i]--;
System.out.print((char)(i+'a')+" ");
wr.write((char)(i+'a'));
}
}
}
re.close();
wr.close();
}
}