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(" "); 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(); } }