详解)"/>
Java的输入输出(自纂的详解)
1.基本概念:
字节流InputStream/OutputStream家族,这些类用来读写以字节为单位的流,通常用来处理二进制流
字符流Reader/Writer家族,这些类用来读写以Unicode字符组成的文本流,用来处理文本流
介质流:这些流是在某一个介质上发生的,介质流是直接和保存数据的介质打交道的流
比如 FileInputStream /FileOutputStream,它的流是一个文件,是指打开一个 文件,以那个文件的内容作为流来读
过滤器流:把字节转换成二进制,过滤流是构造在介质流或者其他过滤流的基础上的流
package io;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;public class DataSava {public static void main(String[] args) {int i=1234;double d=1234.0;try{DataOutputStream out=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.bin")));out.writeInt(i);out.writeDouble(d);out.close();DataInputStream in=new DataInputStream(new BufferedInputStream(new FileInputStream("data.bin")));int ii=in.readInt();double dd=in.readDouble();in.close();System.out.println(ii);System.out.println(dd);}catch(Exception e){String str=e.toString();System.out.println(str);}}
}
现在我们一般用Reader/Writer来读写标准输入输出 ,见下边的几个例子
2.从键盘输入多组数据,存入到文件中,并从文件中读数据
平时接触到的所有文件都是以字节为单位进行编码的文件
键盘读入:BufferedReader br=new BufferedReader(new InputStreamReader(System.in))
这对桥梁类,在读写过程中,会自动进行本地编码和Unicode之间的转换
读文件:BufferedReader fin=new BufferedReader(
new InputStreamReader(
new FileInputStream(file)));
写文件:
BufferedWriter out=new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(file)));
(1) FileInputStream /FileOutputStream 都是介质流,以文件的内容作为流,以文件中的内容为流进行读取,因为文件都是以字节为单位进行编码的
(2) InputStreamReader 是字节流通向字符流的桥梁:它使用指定的
读取字节并将其解码为字符。charset
OutputStreamWriter 是字符流通向字节流的桥梁
(3) BufferReader: 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
BufferWriter: 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
package io;
import java.io.*;
public class ReaderWriter1 {public static void main(String[] args) {//从键盘输入多组数据,存入到文件中File file=new File("out.txt");try{BufferedReader br=new BufferedReader(new InputStreamReader(System.in));BufferedWriter out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));String line1=null;int i=0;while(i++<10){line1=br.readLine();out.write(line1);out.flush();//将缓冲区的数据实际地写入流的介质out.newLine();// 写入一个行分隔符}br.close();out.close();//从文件中读数据BufferedReader fin=new BufferedReader(new InputStreamReader(new FileInputStream(file)));String line2;while((line2=fin.readLine())!=null){System.out.println(line2);}fin.close();}catch(Exception e){e.printStackTrace();}}
}
3.设计一个程序,用户输入一个文件名,打开该文本文件,并统计输出其中26个英文字母出现的次数
package io;
import java.io.*;
public class staticisc {public static void main(String[] args) {int a[]=new int[26];try{BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("read.txt")));String s=null;while((s=br.readLine())!=null){char arr[]=s.toCharArray(); //字符串转换成 字符数组for(int i=0;i<s.length();i++){a[arr[i]-'A']++;}}for(int i=0;i<26;i++){System.out.println((char)('A'+i)+":"+a[i]);//强制类型转换}}catch(Exception e){e.printStackTrace();}}
}
更多推荐
Java的输入输出(自纂的详解)
发布评论