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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ksuper&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值